diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b64f0d..cbfe334 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,8 @@ jobs: module: dfo_provenance_docs - package: python/descriptions module: dfo_descriptions + - package: python/client-contract + module: dfo_client_contract defaults: run: working-directory: ${{ matrix.package }} @@ -74,6 +76,7 @@ jobs: python/dfo-spec-kit-components, python/provenance-docs, python/descriptions, + python/client-contract, ] python-version: ["3.12", "3.13"] defaults: @@ -141,3 +144,6 @@ jobs: - name: Validate step and description vectors run: uv run tools/validate_descriptions_vectors.py + + - name: Validate the client contract + run: uv run tools/validate_client_contract.py diff --git a/README.md b/README.md index 7bede2f..d290c0e 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ The **component-spec family** (the presentation catalogue, composition schema, o ## Status -Five Python distributions exist so far. `python/spec-kit/` (`dfo-spec-kit`, import `dfo_spec_kit`): `identity/` implements the spec1 identity scheme (role-slot projection, JCS canonicalisation, SHA-256 `spec_id` minting), conformance-tested against the vector suite. `units/` reads a unit ref into a typed value (`Money`, `UnpricedMoney`, `Percent`, `Count` or `Other`) from `registries/units.json`, conformance-tested against `vectors/units/`. Money whose ref leaves prices unstated cannot be compared until `complete_prices` applies the StatVar's measurement qualifier, and constant-price money with no base year cannot be compared at all. `models/` has no code yet; model extraction comes next. `python/frame-grammar/` (`dfo-spec-kit-frame-grammar`, import `dfo_frame_grammar`): the frame grammar's executable form -- canonical frame bytes and `content_version` minting for a materialised observation table -- conformance-tested against its own vector suite, and depending on `dfo-spec-kit` for the identity canonicalisation primitives it reuses. `python/dfo-spec-kit-components/` (`dfo-spec-kit-components`, import `dfo_spec_kit_components`): the presentation contract bundle as package data, holding the envelope schema, the per-member component schemas, the write-side intent grammar, and their conformance fixtures. Generated Pydantic models for the catalogue land in this same package once the catalogue freezes. `python/provenance-docs/` (`dfo-spec-kit-provenance-docs`, import `dfo_provenance_docs`): the provenance documentation grammar, which decodes the escaped Markdown documents a Provenance node carries and parses the transformations, changelog, methodology and notes templates, conformance-tested against its own vector suite. `python/descriptions/` (`dfo-spec-kit-descriptions`, import `dfo_descriptions`): the step records and descriptions contract, holding the step schema, the operation list, the description schema and a check of the structure rules a step list must meet beyond its schema, conformance-tested against its own vector suite. +Six Python distributions exist so far. `python/spec-kit/` (`dfo-spec-kit`, import `dfo_spec_kit`): `identity/` implements the spec1 identity scheme (role-slot projection, JCS canonicalisation, SHA-256 `spec_id` minting), conformance-tested against the vector suite. `units/` reads a unit ref into a typed value (`Money`, `UnpricedMoney`, `Percent`, `Count` or `Other`) from `registries/units.json`, conformance-tested against `vectors/units/`. Money whose ref leaves prices unstated cannot be compared until `complete_prices` applies the StatVar's measurement qualifier, and constant-price money with no base year cannot be compared at all. `models/` has no code yet; model extraction comes next. `python/frame-grammar/` (`dfo-spec-kit-frame-grammar`, import `dfo_frame_grammar`): the frame grammar's executable form -- canonical frame bytes and `content_version` minting for a materialised observation table -- conformance-tested against its own vector suite, and depending on `dfo-spec-kit` for the identity canonicalisation primitives it reuses. `python/dfo-spec-kit-components/` (`dfo-spec-kit-components`, import `dfo_spec_kit_components`): the presentation contract bundle as package data, holding the envelope schema, the per-member component schemas, the write-side intent grammar, and their conformance fixtures. Generated Pydantic models for the catalogue land in this same package once the catalogue freezes. `python/provenance-docs/` (`dfo-spec-kit-provenance-docs`, import `dfo_provenance_docs`): the provenance documentation grammar, which decodes the escaped Markdown documents a Provenance node carries and parses the transformations, changelog, methodology and notes templates, conformance-tested against its own vector suite. `python/descriptions/` (`dfo-spec-kit-descriptions`, import `dfo_descriptions`): the step records and descriptions contract, holding the step schema, the operation list, the description schema and a check of the structure rules a step list must meet beyond its schema, conformance-tested against its own vector suite. `python/client-contract/` (`dfo-spec-kit-client-contract`, import `dfo_client_contract`): the contract the DFO Python and TypeScript clients are built to, as package data: the served OpenAPI document of the composed dfo-apis app, the response members the clients act on, the caller's next step for each refusal code, the code of each error a client raises itself, the scenario and `DatasetRef` formats with their records, and the client rules with their vectors. dfo-apis CI checks its app against the same files. -The Python distributions live at `python/spec-kit/`, `python/frame-grammar/`, `python/dfo-spec-kit-components/`, `python/provenance-docs/`, and `python/descriptions/`, each its own installable unit with its own version and dependency surface. A TypeScript package (`ts/`) opens only when the component catalogue freeze lands. +The Python distributions live at `python/spec-kit/`, `python/frame-grammar/`, `python/dfo-spec-kit-components/`, `python/provenance-docs/`, `python/descriptions/`, and `python/client-contract/`, each its own installable unit with its own version and dependency surface. A TypeScript package (`ts/`) opens only when the component catalogue freeze lands. -`dfo-spec-kit-frame-grammar` depends on `dfo-spec-kit` as an intra-repo path source rather than a git dependency, so the two packages develop together in this repo: a change to identity canonicalisation and a change here that depends on it land in the same commit. `dfo-spec-kit-components` depends on `dfo-spec-kit-descriptions` as an intra-repo path source, because the envelope's `description` references `description.schema.json` by its `$id`. A consumer pins both distributions at one revision. Its catalogue bundle is static data plus one accessor function, `bundle_dir()`. `dfo-spec-kit-provenance-docs` also stands alone, depending on `markdown-it-py` only. `dfo-spec-kit-descriptions` depends on `rfc8785` only. +`dfo-spec-kit-frame-grammar` depends on `dfo-spec-kit` as an intra-repo path source rather than a git dependency, so the two packages develop together in this repo: a change to identity canonicalisation and a change here that depends on it land in the same commit. `dfo-spec-kit-components` depends on `dfo-spec-kit-descriptions` as an intra-repo path source, because the envelope's `description` references `description.schema.json` by its `$id`. A consumer pins both distributions at one revision. Its catalogue bundle is static data plus one accessor function, `bundle_dir()`. `dfo-spec-kit-provenance-docs` also stands alone, depending on `markdown-it-py` only. `dfo-spec-kit-descriptions` depends on `rfc8785` only. `dfo-spec-kit-client-contract` depends on the standard library only. Publishing is undecided: no registry workflow exists for any package. Until that's resolved, install a Python package as a git dependency pinned to one commit, e.g. @@ -28,6 +28,7 @@ uv add "git+https://github.com/DevelopmentFinanceObservatory/spec-kit@#subd uv add "git+https://github.com/DevelopmentFinanceObservatory/spec-kit@#subdirectory=python/dfo-spec-kit-components" uv add "git+https://github.com/DevelopmentFinanceObservatory/spec-kit@#subdirectory=python/provenance-docs" uv add "git+https://github.com/DevelopmentFinanceObservatory/spec-kit@#subdirectory=python/descriptions" +uv add "git+https://github.com/DevelopmentFinanceObservatory/spec-kit@#subdirectory=python/client-contract" ``` A package's metadata names its intra-repo dependency by distribution name alone, and no index serves these distributions. uv reads the path source in `[tool.uv.sources]` and resolves the dependency from the same checkout, so `uv add` of `frame-grammar` or `dfo-spec-kit-components` alone installs `dfo-spec-kit` or `dfo-spec-kit-descriptions` at that commit. Every other installer reads the bare name and fails, so name both distributions at the same commit: @@ -68,6 +69,8 @@ dfo-spec-kit/ │ # the provenance documentation grammar and its vector suite as package data ├── python/descriptions/ # the dfo-spec-kit-descriptions package (import dfo_descriptions), │ # the step and description schemas, the operation list and their vector suite as package data +├── python/client-contract/ # the dfo-spec-kit-client-contract package (import dfo_client_contract), +│ # the served OpenAPI document, strict fields, caller actions, scenarios, ref format and client rules as package data ├── policies/ # compatibility policy per artifact family └── tools/ # codegen + drift-check scripts, including the registry and vector validators ``` diff --git a/python/client-contract/.pre-commit-config.yaml b/python/client-contract/.pre-commit-config.yaml new file mode 100644 index 0000000..60bef61 --- /dev/null +++ b/python/client-contract/.pre-commit-config.yaml @@ -0,0 +1,121 @@ +# Pre-commit hooks for Python + data repos +# Install dev deps: uv sync --group dev +# Enable hooks: pre-commit install +# Run all files: pre-commit run --all-files +# Update hooks: pre-commit autoupdate +# Skip once: git commit --no-verify + +repos: + # --------------------------------------------------------------------------- + # Ruff: fast linter + formatter + # --------------------------------------------------------------------------- + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.15.21 + hooks: + - id: ruff-check + args: [--fix] + files: ^python/client-contract/ + - id: ruff-format + files: ^python/client-contract/ + + # --------------------------------------------------------------------------- + # Core hygiene, JSON/YAML/TOML, security + # --------------------------------------------------------------------------- + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + # Whitespace & endings + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + - id: end-of-file-fixer + - id: mixed-line-ending + args: [--fix=lf] + + # Conflicts & platform quirks + - id: check-case-conflict + - id: check-merge-conflict + + # Python sanity + - id: debug-statements + - id: check-ast + - id: check-shebang-scripts-are-executable + - id: check-builtin-literals + - id: check-docstring-first + + # Config/data formats + - id: check-json + - id: pretty-format-json + args: [--autofix, --indent=2, --no-sort-keys, --no-ensure-ascii] + exclude: | + (?x)^( + \.idea/.*| + \.vscode/.* + )$ + - id: check-yaml + args: [--allow-multiple-documents] + - id: check-toml + + # Basic secret hygiene + - id: detect-private-key + + # Large files (1MB) with sensible excludes + - id: check-added-large-files + args: [--maxkb=5000] + exclude: | + (?x)^( + .*\.parquet| + .*\.feather| + uv\.lock + )$ + + # --------------------------------------------------------------------------- + # Type checking (uses settings from pyproject.toml) + # --------------------------------------------------------------------------- + - repo: local + hooks: + - id: ty + name: ty type check + language: system + entry: bash -c 'cd python/client-contract && uv run ty check' + types: [python] + files: ^python/client-contract/ + pass_filenames: false + + # --------------------------------------------------------------------------- + # Spelling (docs + code comments) + # --------------------------------------------------------------------------- + - repo: https://github.com/codespell-project/codespell + rev: v2.4.3 + hooks: + - id: codespell + args: [--write-changes] + # The contract files are data: served bodies, keys and codes read as + # misspellings, and --write-changes would rewrite them. + exclude: | + (?x)^( + .*\.lock| + .*\.parquet| + .*\.feather| + .*/dfo_client_contract/.*\.json + )$ + + # --------------------------------------------------------------------------- + # GitHub Actions linting + # --------------------------------------------------------------------------- + - repo: https://github.com/rhysd/actionlint + rev: v1.7.12 + hooks: + - id: actionlint + + # --------------------------------------------------------------------------- + # Markdown formatting (GFM + front matter) + # --------------------------------------------------------------------------- + - repo: https://github.com/hukkin/mdformat + rev: 1.0.0 + hooks: + - id: mdformat + additional_dependencies: + - mdformat-gfm>=1.0.0 + - mdformat-frontmatter>=2.1.0 + # Example: limit to docs if desired + # files: ^(README\.md|docs/|.*/README\.md)$ diff --git a/python/client-contract/CHANGELOG.md b/python/client-contract/CHANGELOG.md new file mode 100644 index 0000000..741bade --- /dev/null +++ b/python/client-contract/CHANGELOG.md @@ -0,0 +1,23 @@ +# Changelog + +All notable changes to the `dfo-spec-kit-client-contract` Python package will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this package adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- Package scaffolding (uv, ruff, ty, pytest). +- `served/openapi.json`, the composed dfo-apis app's OpenAPI document, and `served/SOURCE.json`, naming dfo-apis commit `635943e03a297f686ca5af32f6d027181d1971d4`. +- `strict-fields.json` and its schema: 29 members that stay required and non-nullable, each one a client reads, and the answer kinds, part statuses and operation statuses the clients branch on. +- `actions.json` and its schema: the caller's next step for each of the 101 active refusal codes on `problem_details` or `no_data_reason`, with the gap kind of each no_data reason. +- The status fallback for a refusal whose code has no row: 400 and 422 to `InvalidRequestError`, 401 to `AuthenticationError`, 403 to `PermissionDeniedError`, 404 and 410 to `NotFoundError`, 408 to `DfoTimeoutError`, 429 to `RateLimitError`, and any other 4xx or 5xx to `InvalidRequestError` or `ServerError`. +- `scenario.schema.json`, the scenario record, and 118 scenarios: 31 recorded against the composed dfo-apis app at `635943e03`, and 87 synthetic, each derived from a recorded one by a one-line edit, with 19 binary bodies totalling 2,105,201 bytes. The scenarios cover the several-part choice entries and the assumptions each identity entry echoes, a picked reading whose assumption Search states in its answer, the place choice through a no_data part's options, the choice refusals, a part without variable_text, an unknown status without a restatement, a shared label, a one-part option whose data_query holds two parts, the separate and operations echo, an unsupported part's placeholder, the timed_out, unsupported and unknown gaps, an unknown answer kind, the `SearchWarning` rule, the stacked dataset's `part` column, the frame layout, a strict fetch's `DataWarning`, a spec fetch that rebinds one of two entity roles and keeps the other, one that drops a role bound to null, a spec whose destination is a named group fetched with a window or with its origin rebound, whose sentence lookup posts the groups of the roles the build left bound, a twice cut-off build, a cut-off build retried after its Retry-After, a build refused 504 then 503 and one refused 503 then 504, a refused build, a build refused 501 `capability_unavailable`, a digest mismatch, a signed URL refused on both rounds, a relative files-route Location, an artifact url on a foreign origin, on the storage host and absolute on the API's origin, a manifest definition without identity or schema_version, a Search spec without identity or resolved, nested specs no rule reads, an empty parts list, a Search body that is not an object, a codeless 503 problem document that is not retryable, a 401, an identity resubmit answering another spec, a part whose status is not a string, a Search spec whose definition names another spec_id, a Search response with no JSON body, an option with no data_query, empty entities and facets, a Sunset header issued once, `x-dfo-warning` messages and a Deprecation and Sunset pair, an unreadable versions page, a mint and a spec fetch whose build answers 202 and is polled to done, a resumed operation, a rate-limited poll, 503 polls retried within the budget an answered poll restores, a 404 poll that raises, a failed operation posted again, a failed operation with no error, and a ref whose stored file expired, read through the file selector, rebuilt at the same version, at a newer one, or refused with the newest version read from the versions route. +- `client-codes.json` and its schema: the 17 codes a client sets on the errors it raises itself, each with its error class, retryable flag and condition, disjoint from `actions.json` and `registries/codes.json`, and the `client_codes()` and `client_codes_schema()` accessors. Every scenario error the client raises itself carries its code, and `refusal_without_code` names a refusal whose body carries no code. +- `proxy-codes.json` and its schema, the website proxy's `rate_limited` and `transient_unavailable` codes with their statuses, and `warning-codes.json` and its schema, the 5 codes a client sets on the warnings it issues itself, with the `proxy_codes()` and `warning_codes()` accessors. +- Error outcomes give the error's `trace_id`, the body's, else the `x-dfo-trace-id` header's, else null. Scenario outcomes give `retry_waits`, the waits before each retry, and `warnings`, the warning codes a step's responses issued. Scenario steps take no `timeout`. +- `dataset-ref.schema.json`, the frozen `DatasetRef` format, with accepted and rejected examples. +- `tools/capture_client_contract.py`, which captures `served/openapi.json` from a dfo-apis checkout in process and records the scenarios against a base URL, dev by default, or with `record --offline` derives their outcomes again from the records with no request. A local app's signed URLs are written as the storage URLs a deployment signs. +- `tools/validate_client_contract.py`, which checks the contract against its schemas, the served document and `registries/codes.json`, checks `client-codes.json` against them and against the reasons the key-lookup rule raises, and checks each scenario's `expect` against the outcomes its exchanges, `actions.json` and `client-codes.json` give, each Search request against the input its steps derive, a sentence lookup's `entity_groups` included, each build's `input.scope` against the narrowing its step names over the spec's bound roles, each build's options against its layout, each Search request's whole body, each download against its artifact's digest, each recorded scenario's commit against `served/SOURCE.json`, each proxy refusal's code against `proxy-codes.json`, and each absolute URL against the storage host. A record that ends a run of retries while a retry remains does not fit. The outcomes include each long build's operation id, poll waits and resubmissions, and a `VersionUnavailableError`'s newest version. +- The client rules and their vectors: the credentials path and file format, the key lookup order, with an empty `api_key` refused as `key_empty` and an empty profile key as `profile_without_key`, the key format check, and the cache directory and layout. + +[unreleased]: https://github.com/DevelopmentFinanceObservatory/spec-kit/commits/main/python diff --git a/python/client-contract/README.md b/python/client-contract/README.md new file mode 100644 index 0000000..ca57143 --- /dev/null +++ b/python/client-contract/README.md @@ -0,0 +1,229 @@ +# dfo-spec-kit-client-contract (Python) + +This package holds the contract the DFO clients are built to: the Python client `development-finance` and the TypeScript client `@developmentfinance/client`. The clients generate their wire types, strict checks and error maps from these files and replay the scenarios. dfo-apis CI validates the recorded exchanges against the app's current OpenAPI document, strict fields and code registry. The SDK's scheduled live journeys check deployed server behavior; a change that preserves the schema can pass the API gate. The files below are normative; where this README and the files disagree, the files win and the disagreement is a bug. See the [repo README](../../README.md) for how this package fits with the rest of `dfo-spec-kit`. + +The import name is `dfo_client_contract`. It depends on the standard library only. + +## Installation + +This package uses [uv](https://docs.astral.sh/uv/) for dependency management. + +```bash +uv sync +``` + +## Development + +```bash +# Run tests +uv run pytest + +# Lint +uv run ruff check . + +# Format +uv run ruff format . + +# Type check +uv run ty check src/dfo_client_contract +``` + +## Contents + +`src/dfo_client_contract/` ships with the package. Each schema's `$id` is its path under `https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/`, as the kit's other schemas are, because the kit has no schema-hosting service. + +| File | Holds | +| --------------------------- | ------------------------------------------------------------------------------------- | +| `served/openapi.json` | The composed dfo-apis app's OpenAPI document, which both clients generate types from | +| `served/SOURCE.json` | The dfo-apis repository and commit `served/openapi.json` was captured from | +| `strict-fields.json` | The response members the clients act on | +| `strict-fields.schema.json` | The shape of `strict-fields.json` | +| `actions.json` | The caller's next step for each refusal code, and the gap kind of each no_data reason | +| `actions.schema.json` | The shape of `actions.json` | +| `client-codes.json` | The code, class and condition of each error a client raises itself | +| `client-codes.schema.json` | The shape of `client-codes.json` | +| `proxy-codes.json` | The code and status of each refusal the website proxy answers itself | +| `proxy-codes.schema.json` | The shape of `proxy-codes.json` | +| `warning-codes.json` | The code, class and condition of each warning a client issues itself | +| `warning-codes.schema.json` | The shape of `warning-codes.json` | +| `scenario.schema.json` | One scenario record | +| `scenarios/` | The scenario records, and the binary response bodies they name | +| `dataset-ref.schema.json` | The frozen `DatasetRef` format | +| `refs/` | Accepted and rejected `DatasetRef` examples | +| `rules/` | The client rules, one vector file each, with `rules.schema.json` and the rules' text | + +| Function | Returns | +| ----------------- | ----------------------------------------------------------- | +| `openapi()` | `served/openapi.json`, parsed | +| `served_source()` | `served/SOURCE.json`, parsed | +| `strict_fields()` | `strict-fields.json`, parsed | +| `actions()` | `actions.json`, parsed | +| `client_codes()` | `client-codes.json`, parsed | +| `proxy_codes()` | `proxy-codes.json`, parsed | +| `warning_codes()` | `warning-codes.json`, parsed | +| `scenarios()` | Every scenario record; raises `RuntimeError` when none load | +| `ref_examples()` | Every `DatasetRef` example; raises `RuntimeError` when none | +| `rule(name)` | The vector file for one of `RULES` | +| `contract_dir()` | The installed contract directory | +| `*_schema()` | Each schema, parsed | + +## Served document + +`served/openapi.json` is `app.openapi()` of the composed dfo-apis app as deployed, with the Search, Datasets, Graph and Presentation surfaces mounted and the platform's `/codes/{code}` route beside them, and no other route. `served/SOURCE.json` names the commit it came from as `{format_version, repository, commit, captured_from}`. It names the closed runtime models, `Manifest`, `ArtifactEntryModel`, every Search part model and `ProblemDetails` among them, which the per-surface schema routes leave open. Both clients generate wire types from it and parse tolerantly regardless of its `additionalProperties: false`: an unknown member or enum value passes through. + +## Strict fields + +`strict-fields.json` lists the members a client cannot act without. Each pointer names one property of one component schema, `/components/schemas//properties/`. A `required` entry stays in its schema's `required` list and admits no null, so a client raises `ContractError` when one is missing or null. Every entry is a member some client rule acts on, and a client checks a body only along them: from the body's root it goes down through strict members alone, so a member no client reads goes unchecked, however deep. A `Spec` where no rule reads it, in `resolved.equivalent_readings`, `no_data.flagged_match` or `no_data.alternate_match`, may lack `resolved` or its definition's `identity` and raises nothing, which `answer-nested-specs-unchecked` pins at all three. A strict member that holds a JSON type its schema does not admit raises `ContractError` `contract_violation` at its pointer, as a missing one does, which `answer-candidate-specs-not-a-list` pins with `candidates.specs` as an object. An integer is a JSON number with no fractional part that is not a boolean, as JSON Schema's `integer` reads it, since a JavaScript client cannot tell `1.0` from `1`: a strict member such as a manifest definition's `schema_version`, and a ref's `definition.schema_version`, admit `1.0` and refuse `1.5` and `true`. Each item of a strict list, `parts`, `candidates.specs` or `artifacts`, must be an object, and an item of another type raises `contract_violation` at its index pointer, such as `/parts/0/candidates/specs/0`. A member a client reads that no strict pointer names, and that holds a JSON type other than the list, object or string its rule reads, reads as absent, and so does every member of a holder that is not an object; an item of another type in such a list reads as absent too. So `no_data.options` as an object or null offers no option, `mentions` as a string mentions nothing, and a `diagnostics` that is not an object holds no `timed_out` and no warnings. `answer-operations-not-a-list` pins a definite part's `operations` as an object. An item of an `assumptions` or `reading_assumptions` list reads only when it is an object whose `kind`, `binding_ref` and `text` are strings, and an item of an `operations` list only when it is an object whose `verb` and `phrase` are strings; any other item reads as absent. A read item holds its schema's members alone: an assumption's `refs` as its string items when it is a list, and an operation's `over` when it is a string or null and its `target_year` when it is null or a number other than a boolean with no fractional part, read as that integer, so `2020.0` reads and echoes as `2020` and `2020.5` reads as absent. An optional member of another type reads as absent, and a client reads no member the schema does not name. An `enums` entry keeps every listed value, the values a client branches on: the answer kinds, the part statuses and the operation statuses. A client still accepts a value no entry lists. + +The answer's `kind` and each part's `status` are the discriminators of their unions in the served document. A search response with no `kind` raises `ContractError`, as a part with no `status` does, although the served document gives `kind` a default and leaves it out of `required`. A part `status` a client does not know raises nothing and makes the part an `unknown` gap. An answer `kind` a client does not know raises `ContractError`, because the client cannot read the answer. A Search response body that is not an object, a `resolution` answer whose `parts` is empty, at pointer `/parts`, since the served schema gives it at least one item, a part whose `status` is not a string, at pointer `/parts//status`, and a definite or candidate spec whose `definition.spec_id` differs from its `spec_id` raise `ContractError` `contract_violation`, in a Search response as in a ref; `search-body-not-an-object`, `answer-empty-parts`, `answer-part-status-not-a-string` and `answer-definition-spec-id-mismatch` pin the four. + +The required members are each part's `status` and its payload (`spec`, `candidates`, `no_data`, `unsupported`), `Resolution.parts`, `CandidateSet.specs`, `NoData.reason`, `Unsupported.code`, `Spec.spec_id`, `definition` and `resolved`, `SpecDefinition.spec_id` and `identity`, the manifest's `definition`, `definition.schema_version`, `definition.spec_id` and `definition.identity`, `content_version` and `artifacts`, each artifact's `artifact_digest`, `rendering` and `url`, and the operation resource's `operation`, `operation_id` and `status`. The operation's `poll` is nullable in the served document, so a client builds the poll path from `operation_id`. A client posts a spec's `identity` back to Search and reads its `resolved.entity_groups`, so a Search spec without `resolved`, or a definition, a Search spec's or a manifest's, without `identity` raises `ContractError` `contract_violation`; `answer-spec-without-resolved`, `answer-spec-without-identity` and `fetch-spec-manifest-without-identity` pin them. A ref holds a manifest's definition as it is, and the ref format requires its `schema_version`, so a manifest definition without `schema_version` raises `ContractError` `contract_violation` too, which `fetch-spec-manifest-without-schema-version` pins. + +## Actions + +`actions.json` has one row per active refusal code in `registries/codes.json` that reaches a problem document (`problem_details`) or a no_data part's `reason` (`no_data_reason`), sorted by code. `action` is the caller's next step, and each client maps it to one error class. + +| `action` | Error class | The caller | +| --------------------- | ------------------------- | ------------------------------------------------ | +| `fix_request` | `InvalidRequestError` | Changes the request | +| `check_id` | `NotFoundError` | Checks the spec, version, operation or other id | +| `choose` | `IncompleteAnswerError` | Chooses among the gap's options | +| `ask_data_question` | `IncompleteAnswerError` | Asks the question another way | +| `take_newest_version` | `VersionUnavailableError` | Takes the newest version | +| `log_in` | `AuthenticationError` | Logs in | +| `request_scope` | `PermissionDeniedError` | Asks for the permission the call needs | +| `wait` | `RateLimitError` | Waits, then retries | +| `wait_for_reset` | `QuotaExceededError` | Waits for the quota to reset | +| `report` | `ServerError` | Reports the trace id, after the client's retries | +| `upgrade` | `ContractError` | Upgrades the client | + +A code that maps to `no_data_reason` also carries `gap_kind`, the kind of gap a no_data part with that reason becomes: `choice`, `no_data`, `not_understood` or `unsupported`. `choose` goes with `choice` and only with it. `choose` and `ask_data_question` name a next step inside an answer, so a code that also reaches a problem document takes another action. The website proxy's own `{error, retry, detail}` body carries its code in `error`. `proxy-codes.json` lists those codes with their status, `rate_limited` at 429 and `transient_unavailable` at 502, and the validator refuses a proxy body whose `error` it does not list at that status. No proxy code has a row here, so a client raises a proxy refusal with the class its status maps to. `capability_unavailable` is a well-formed request for a format, reshape or conversion class the deployment does not enable, answered 501; its action is `fix_request`, since the caller asks for another one, and `fetch-spec-capability-unavailable` pins it. + +A client maps a refusal whose code has no row, or that carries no code, on its HTTP status: + +| Status | Error class | +| ------------- | ----------------------- | +| 400, 422 | `InvalidRequestError` | +| 401 | `AuthenticationError` | +| 403 | `PermissionDeniedError` | +| 404, 410 | `NotFoundError` | +| 408 | `DfoTimeoutError` | +| 429 | `RateLimitError` | +| any other 4xx | `InvalidRequestError` | +| any other 5xx | `ServerError` | + +A 408 is a timeout the caller retries, and a 410 names a resource that is gone, so the caller stops as it does on a 404. A client reads a refusal's body, a problem document or the proxy's own, when its content type is `application/problem+json` or `application/json`; a body of any other type reads as no body, so the refusal carries no code. A no_data reason with no row becomes a `no_data` gap. + +An answer's gaps follow from its parts. A candidates part is a `choice` gap, its options the candidates. A no_data part is a gap of its reason's `gap_kind`, its options the no_data `options`, and of kind `timed_out` instead when the answer's `diagnostics.timed_out` is true. An unsupported part is an `unsupported` gap. A part whose status a client does not know is an `unknown` gap. + +## Client codes + +`client-codes.json` lists, sorted by code, each code a client sets on an error it raises when no problem document carries one: the `code`, the error `class` it raises, `retryable`, and a one-line `condition`. `retryable` is the flag both clients generate onto the error: `deadline_exceeded`, `download_failed` and `network_error` are retryable, `digest_mismatch` and the rest are not, and `refusal_without_code` is retryable as its status is, which its row gives as `by_status`. Both clients set an error's `code` from this list, so every error a client raises carries a code. A refusal keeps the server's code: the problem document's `code`, or the website proxy's `error`. A refusal whose body carries neither raises `refusal_without_code` with the class its HTTP status maps to, which its row gives as `by_status`. No other row does. A problem document without a code still gives the error its `retryable` and `trace_id`, so a 503 whose body says `retryable: false` raises at once, which `search-refused-without-code` pins. Every refusal's trace id is the response's trace id, as the trace-id rule under Scenarios gives it. `search-refused-without-code` pins the body's winning over the header, and `search-unauthorized` the header's for a refusal with no body. No client code is a code in `actions.json` or `registries/codes.json`, and each class is one the scenario schema names. Each reason the key-lookup rule raises, `key_empty`, `profile_not_found`, `profile_without_key` and `credentials_file_invalid`, is a row of class `AuthenticationError`. The list holds no warning. `warning-codes.json` lists, sorted by code, each code a client sets on a warning it issues itself, with its class and condition: `route_deprecated`, a `DfoDeprecationWarning`, for a `Deprecation` or `Sunset` header; `server_warning`, a `DfoWarning`, for an `x-dfo-warning` header; and `key_checksum_mismatch`, `key_not_base62` and `key_unknown_prefix`, each a `DfoWarning`, for a key that fails the key-format rule with that reason. Both clients generate their warning codes from it and issue no other. No warning code is a code in another table or in `registries/codes.json`. A `SearchWarning` carries the code of the one way the readings differ from the question, a departure's or a warning's code or the verb of an operation Search did not run, and a null code when they differ in several ways. A `DataWarning` carries the manifest warning's code. + +## Scenarios + +A scenario is one client-level call, the HTTP exchanges it makes, and the outcome each step reaches. Each record is one file, `scenarios/.json`, validated by `scenario.schema.json`. + +| Member | Holds | +| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `format_version` | `1` | +| `name` | The kebab-case name, equal to the file name's stem | +| `description` | One or two sentences on what the scenario proves | +| `origin` | `recorded`, with the `base_url`, the deployed `dfo_commit` and `recorded_at`; or `synthetic`, with the recorded scenario it is `derived_from` and a one-line `edit` | +| `call` | The steps, in order: `search`; `choose`; `fetch` of the previous answer, of a `spec` with `window`, `entities` and `facets`, or of a `ref`; `mint`; `operation`, which resumes a long build by its `operation_id`; `result`; `newest_version` of a `spec` | +| `exchanges` | The requests the call makes, in order, each with the response to give | +| `expect` | One outcome per step: an `answer`, a `dataset`, an `operation`, a `newest_version` or an `error` | + +A step that acts on an earlier result follows one: `choose` follows `search` or `choose`, a `fetch` with no target follows `search`, `choose` or another `fetch` with no target and acts on the last answer, and `result` follows `mint` or `operation`. A `fetch` of an answer or a spec, `mint` and `operation` take a `layout`, `long` by default or `frame`, and a `fetch` of an answer or a spec takes `strict`. A `spec` in a step holds `spec_id`, the server's unmodified `definition`, the `sentence` when the client knows it, and the server's `resolved.entity_groups` as `entity_groups` when it names any. + +An exchange's request names its target in one of three ways. `path` is a path the client composes under the base URL, such as `/search/resolve`. `origin_path` is a root-relative URL the server returned, such as an artifact's `url`, or the path and query of an absolute one on the API's origin, which resolves against the base URL's origin, whatever path that URL has. `url` is an absolute URL outside the API, such as the signed storage URL a files route redirects to, which the client fetches with a bare request carrying no client header and no key. `json` holds the request body members that must match; a recorded scenario lists every member the client sent. The response gives `status`, the `headers` a client reads, and a `json` body or a `body_file`, a binary body in `scenarios/`. A scenario's own body files are named `.` and `-.`; a synthetic scenario may instead name a body file its parent names. + +A `newest_version` outcome gives the `content_version` the step found, or null. An answer outcome gives `kind`, `status`, `sentence`, `complete`, the distinct `specs` of its definite parts, and its `gaps`, each with the `part` index, the gap `kind` and the number of `options`. A dataset outcome gives `rows`, `columns`, `complete`, its `members`, each with `parts`, `spec_id`, `content_version` and `sentence`, and the `missing` gaps. For one member the columns are the artifact's columns; a dataset of several members adds a `part` column and gives `part_rows`, one entry per member in member order with the `part` value of that member's rows and their number. A fetch of an answer also gives `search_warning`, whether the fetch issued a `SearchWarning`. An error outcome gives the error `class` and its `code`: a refusal's code, a warning's code, which for a `SearchWarning` may be null, or for any other error the client raises itself its code in `client-codes.json`. Every error outcome gives its `trace_id`: a refusal's, as the refusal rules below give it; a failed operation's, its error document's `trace_id`, else the `x-dfo-trace-id` header of the response that carried the failed resource; a `VersionUnavailableError`'s, its first refusal's, or null when nothing refused. An error the client raises itself follows one rule. An error that describes a response carries that response's trace id, and an error that describes the caller's input carries null. The trace id is the one a user quotes to find the fault in the server's logs. The errors that describe a response are `unexpected_response`, `contract_violation` on a body, `answer_declined`, `answer_incomplete`, and a strict fetch's `SearchWarning` or `DataWarning`. A response's trace id is the top-level `trace_id` member of its body when the body is a JSON object holding one as a non-empty string, a problem document or any other body, else its `x-dfo-trace-id` header, else null. A body `trace_id` that is empty or not a string reads as absent, so the header applies. No scenario holds one, and the validator's tests pin it. A Search answer's `diagnostics.trace_id` is not read, and `answer-timed-out` pins the header's winning over a `diagnostics.trace_id` that differs from it. `answer_declined`, `answer_incomplete`, a `SearchWarning`, and a `contract_violation` a choice raises on an option describe the held answer, so they carry the trace id of the Search response that answered it. The errors that describe the caller's input, `choice_invalid`, `invalid_argument` and the key-lookup reasons, carry null, and so do `digest_mismatch` and `download_failed`, which describe a storage-host fetch, and `deadline_exceeded`, `network_error` and `offline`, which describe no response. `search-no-json-body`, `fetch-spec-strict-warning`, `answer-timed-out`, `answer-empty-parts`, `fetch-spec-files-route-no-content` and `choose-option-two-part-query` pin a trace id on an error that describes a response, `operation-failed-without-error` the header of the response that carried a failed resource with no error, and `choose-refused-shared-label` a null one on a choice whose answer's response carries a trace id. A `VersionUnavailableError` also gives `newest_version`, the version the lookup found, or null. A dataset or error outcome of a step that made a long build gives `long_builds`, one entry per build the server ran on, in order: the `operation_id` the client polled last, the `poll_waits` in seconds before each poll, and the number of `resubmissions`. Any outcome of a step that retried a refused request gives `retry_waits`, the seconds before each retry in order, and any outcome of a step whose API responses issued warnings gives `warnings`, their codes from `warning-codes.json` in order. + +Each outcome follows from the exchanges and `actions.json`, and `tools/validate_client_contract.py` fails a record whose `expect` says otherwise. A record whose outcomes it cannot derive, because its exchanges do not fit its steps or a malformed member raises while it reads them, is reported as that record's problem, and the other records are checked. It runs the steps over the exchanges by the rules below: a refusal followed by the same request is a retry where the retry rules allow one, except on a poll, where the long-build rules count retries, and a record that ends a run of retries while the rules allow another does not fit, since the client makes it, a refusal's class is its code's action or else its status, the class of an error the client raises itself is its code's row in `client-codes.json`, a gap's kind is its reason's `gap_kind`, option and candidate counts are those the bodies hold, a dataset's members, `complete`, `missing` and `search_warning` follow from the answer and the manifests, each POST carries its body, each build posts the body the rules give for the spec it builds, so the builds' order and spec_ids are checked, each Search request posts the whole body `{"schema_version": 1, "input": ...}` with the input the rules give: the question, a choice's input, or a member's identity, each poll names the operation the client holds, each files route is the one the artifact's `url` names, each signed download is the URL the files route's `location` names, each retry waits the wait the retry rules give, and each response's warning headers issue the warnings the warning rules give. A dataset's `rows`, `columns` and `part_rows` row counts are the Parquet bodies' and are not derived, except that `part` comes first and `part_rows` is given exactly when the dataset has several members, each entry's `part` is its member's value and their rows sum to `rows`. + +A recorded scenario's request and response bodies validate against their route's schemas in `served/openapi.json`. A required member stays required when its schema admits null: the body carries it, as null or a value. A member the schema leaves optional may be absent or null, and a client reads both as null. + +A client replays a scenario by serving the exchanges in order: + +- A request matches the next exchange on its method and target, and on each listed `json` member, compared as parsed JSON values. +- A request with no exchange left, or one that matches none, fails the scenario, and so does an exchange the call never makes. +- `path` resolves against the base URL the replay gives the client, and `origin_path` against that base URL's origin, so a replay can run under any base URL form. +- A replay substitutes its own base URL's origin for the origin of the record's `origin.base_url`, a synthetic record's parent's, wherever a response names it, in its JSON body and its headers. `fetch-spec-same-origin-artifact-url` names the recorded origin in its manifest's artifact `url`s, and the validator replays every scenario under its recorded base URL and again under `https://replay.example.org` with the same path, so a record that holds only under its recorded host fails. +- Sleeps are not replayed. The replay injects the client's clock and sleep, and each wait the client asks for advances the clock at once. The waits before polls are the outcome's `poll_waits`, and the waits before retries its `retry_waits`. +- A replay runs each scenario as a fresh process, so no warning has been issued when it starts. +- Every absolute URL a record holds, a `url` request or a `location` header, is a signed URL on `https://storage.googleapis.com` with its path kept and its query `X-Goog-Signature=redacted`, whatever signed it; a `location` may also name a route under the base URL. The validator compares hostnames and refuses any other host, a local app's under any name or port included. + +The records also fix these client rules: + +- A fetch builds each distinct `spec_id` once, in part order, and finishes one member (build, the sentence when the client lacks it, files, download) before the next. +- A fetch of a spec posts its narrowing as the build's `input.scope`, and posts no `scope` when it narrows nothing. A mint takes a layout and no narrowing, so it posts no `scope`. `window` posts `{"kind": "range", "start_year", "end_year"}` for a pair of years, or `{"kind": "all"}` or `{"kind": "latest"}`, and `facets` posts each axis as `{"ref": ...}`, and `facets: {}` names no axis and posts no `facets`. The server's `scope.entities` replaces the spec's whole entity binding, so `entities` posts a whole map: the roles the spec's `definition.identity.entities` binds, with each role the caller names replaced by its refs and each role the caller binds to null dropped. Naming `origin` alone on a spec bound to `origin` and `destination` keeps `destination`. A fetch that names no role, `entities: {}` included, posts no `entities`, so a fetch whose narrowing is all empty posts no `scope`; `fetch-spec-empty-narrowing` pins it. +- A built `spec_id` that differs from the posted one, or a spec with no sentence, takes its sentence from Search: the client posts the built definition's `identity` as one `dataset_resubmit` identity entry, with the member's first part as `variable_text`, or `"dataset"` when no answer part names it, and checks the answer's `spec_id` equals the built one. The entry's `entity_groups` holds the spec's `resolved.entity_groups` for each role the built identity binds to the same entities as the spec's definition, so a window or facets narrowing keeps every group and a role the narrowing rebound or dropped loses its group. The entry leaves `entity_groups` out when it keeps no group, as for a resumed operation, whose spec the client does not hold. The server reads a role posted without its group as its members, so a narrowed spec of flows to the least developed countries would read "44 recipients" in place of "the 44 Least Developed Countries". +- A dataset of several members puts the `part` column first, then each member's columns in member order, each column once. A column that members hold in different types widens as pyarrow's permissive promotion widens it, and a pair that cannot widen raises `ContractError` `contract_violation`. A member file that already holds a `part` column raises `contract_violation` when members stack. Rows and columns are not derived, so no scenario pins these. The `part` value on a member's rows is the member's `parts` joined by `"; "`, so a member that answers two folded parts reads `"health ODA disbursements; education ODA disbursements"`, or the member's sentence when `parts` is empty. A definite part whose `variable_text` is absent or empty adds nothing to its member's `parts`, which `answer-folded-parts-unnamed` pins. +- A choice names its part by index, by variable text, or by a word that one gap's options mention, and its option, a candidate among them, by index or label. A boolean part or option is neither an index nor a label. A candidate's label is the `text` of its spec's `resolved.sentence_plan` tokens in the `heading` segment, a token whose `segment` is not a string counted in it, joined and stripped of surrounding white space, or else its `resolved.rendered_sentence`. A candidate with neither a heading nor a sentence has a null label; no scenario pins it, and the validator's tests do. A no_data option's label is matched among the options that mention the word the part was named by. With no part named, exactly one gap must await a choice: a `choice` gap, or any gap with options. +- A choice raises `InvalidRequestError` `choice_invalid` and makes no request when no gap, or more than one, awaits it, when the part is named by a boolean, is unknown, names more than one part or already has a reading, when the gap offers no options, or when the option is a boolean, is out of range or matches no label or several. No scenario can hold a boolean part or option, and the validator's tests pin both. It raises the same when an entry it would post cannot be built: a part with no `variable_text`, or a part of a status the client does not know that has no `restatement`. A chosen option whose `data_query` holds other than one part raises `ContractError`, and so does a chosen option with no `data_query`, in a one-part answer as in a several-part one, before any request. `choose-refused-shared-label`, `choose-refused-unknown-candidate-label`, `choose-refused-shared-candidate-label`, `choose-refused-part-without-variable-text`, `choose-refused-unknown-status`, `choose-option-two-part-query` and `choose-option-without-data-query` pin these, and `choose-candidate-by-label` pins a candidate chosen by its label. +- Every pick of a candidate asks Search for the picked answer, and no client builds it locally. In a one-part answer the pick posts `dataset_resubmit`, without `raw_query`, with one identity entry: the candidate's identity and `entity_groups`, and the part's `variable_text`, `separate` and `operations` as below. The picked answer, its sentence with any "Assumed: …" clause, and its assumptions are Search's response. A choice of a no_data option in a one-part answer posts the option's `data_query` as the input. +- In a several-part answer a choice posts `dataset_resubmit`, without `raw_query`, with one entry per part in part order. The chosen candidate posts an identity entry with its identity and `entity_groups`, and the chosen option its `data_query`'s one part as a parsed entry. A definite part posts an identity entry with its spec's identity and `entity_groups`. A candidates part left alone posts a `candidates` entry: its candidate set in the server's order, each with its identity and `entity_groups`, and its `ordering` and `truncated` echoed. The server cannot recompute that order, because it rests on the first answer's bind election and availability reads, and a parsed entry would cost an LLM bind. Any other part posts its `restatement` as a parsed entry, or a placeholder entry with its no_data `reason` or unsupported `code` when it has none. Every entry but a parsed one carries the part's `variable_text`, `separate` when true and `operations` when any of the part's operations reads. `entity_groups` is left out when the spec has none. `choose-echoes-separate-and-operations` pins the echo on a definite part's entry, and `choose-posts-unsupported-placeholder` an unsupported part's placeholder. +- Each identity a choice posts echoes its reading's assumptions as `assumptions`: the chosen candidate's entry carries its part's `reading_assumptions` under the candidate's `spec_id`, a definite part's entry carries the part's `assumptions`, and each candidate of a `candidates` entry carries its own `reading_assumptions` entry. Search then states the echoed items that still hold, so the picked answer states what that reading assumed. `[]` states none. An identity with no `assumptions` reads as a fresh request, so a client that holds no list for a reading, from a part that carries no `assumptions` or `reading_assumptions`, posts none. The identity entry that asks for a built sentence posts no `assumptions`, since it reads only the spec's own `rendered_sentence`. An echoed `operations` or `assumptions` list posts exactly the items a client reads under Strict fields, in order, each built from the members it read: an optional member that read as absent is left out, and a `refs` list posts its string items. An `assumptions` list with no item read posts `[]`, and an `operations` list with none is left out. The item rule checks JSON types alone, so the echo posts what a client read, and the server still checks it against its own value constraints: the `verb` enum, the lengths of `phrase` and `text`, and at most one item in `refs`. `choose-echo-drops-malformed-items` pins both lists. +- A strict fetch raises the manifest's first warning above `info` severity as a `DataWarning` with that warning's code, before the sentence lookup and the download. +- An identity resubmit whose answer is not one definite part of the built `spec_id`, with a sentence, raises `ContractError`. +- The `frame` layout posts `{"format": "parquet", "bundle": false, "layout": "frame"}` as the build's `options` and downloads the artifact whose rendering's `layout` is `frame`; the `long` layout posts `{"format": "parquet", "bundle": false}` and downloads the bare Parquet artifact with any other layout. A fetch of an answer with several members in the `frame` layout raises `InvalidRequestError` before any build. +- A download asks the route that redirects to the signed URL, an artifact's `url` or the file selector, and fetches the URL its `location` names once. A files route answers 302 with the `location` the client fetches, or 200 with the file as its body, which the client hashes with no further request, which `fetch-spec-files-route-serves-file` pins. A refusal reads by the refusal rules, and any other status, another 2xx or another 3xx included, raises `ContractError` `unexpected_response` with that response's trace id, which `fetch-spec-files-route-no-content` pins with a 204 and `fetch-spec-files-route-temporary-redirect` with a 307. The route ask is an API request and follows the retry rules below, so a retryable refusal is retried within the budget and any other refusal, `artifact_expired` among them, raises at once. A failed fetch gets exactly one more round. A fetch that answers anything but 200, which `fetch-spec-signed-fetch-partial` pins with a 206, or bytes that do not hash to the artifact's digest ask the route again, under the same retry rules, and fetch again, with no wait between rounds. A second failure raises `ServerError` with `download_failed`, or `digest_mismatch` when the bytes are wrong. A network error or timeout on the fetch is retryable, so it starts the second round too, and when the second round fails the same way the client raises that failure as itself, `network_error` or `deadline_exceeded`. The replay holds no network failure, so no scenario pins that case. +- A manifest artifact's `url` names its files route on the API's origin. A root-relative `url` resolves against the base URL's origin, and an absolute one on that origin is asked as its path and query, so both make the same `origin_path` request, which `fetch-spec-same-origin-artifact-url` pins. An artifact `url` on any other origin, the storage host's included, raises `ContractError` `contract_violation` before the sentence lookup and any request for the file, which `fetch-spec-foreign-artifact-url` and `fetch-spec-storage-artifact-url` pin. +- A relative `location` resolves against the files route's URL, and the client fetches it on the API's origin as an `origin_path` request. A `location` on an origin other than the API's or `https://storage.googleapis.com` raises `ContractError` `contract_violation` before any fetch. A fetch on the storage host is bare and carries no API key. `fetch-spec-relative-location` pins the relative case. +- The redirect rules above hold where a client reads the files route's response itself: the Python client, and the TypeScript client in Node. A browser page or worker cannot, because a `fetch` with `redirect: "manual"` answers an opaque redirect with no status and no `location`. There the TypeScript client asks the files route again with `redirect: "follow"`, sending the API key alone, which the browser drops on the way to another origin, and the followed request is the round's one fetch. The response must end on the API's origin or `https://storage.googleapis.com`, and any other host raises `ContractError` `contract_violation` after the fetch. So in a browser a files route answering 301, 303, 307 or 308 is followed as a 302 is. The refusal rules, the retry rules, the rounds and the digest check hold in every runtime. The scenario format names no runtime, so the scenarios fix the Python and Node behaviour, and the TypeScript client's own tests check the browser's. +- A declined or catalogue answer is not complete, and fetching it raises `DeclinedError`. +- Fetching an answer with a gap raises `IncompleteAnswerError` before any request, unless the fetch is partial and some part has a reading. +- A fetch of an answer issues one `SearchWarning` when a definite part has an operation Search did not run, a departure, or a warning at severity `warn` or `degraded` with a `message`, or the answer's `diagnostics.warnings` holds such a warning. An `info` warning, a warning with no `message`, and an operation that does not read under Strict fields issue nothing. Each way is one line a client shows: `Not done: ()` coded by the verb, the phrase quoted as a JSON string that keeps non-ASCII characters as they are, the departure's `text` coded by its code, or `Note: ` coded by the warning's code, in part order with the diagnostics warnings last, and ways that show the same line count once, under the first one's code. A strict fetch raises the `SearchWarning` before any build, with the code of its one line, or a null code when there are several lines. A strict fetch raises it before the `frame` layout's several-member check. +- A ref's version is found in this order: the snapshot route and the files route at the stored digest; the file selector, `GET /datasets/{id}/{content_version}/file` with the ref's rendering as the query; and a build of the ref's spec in the ref's rendering, which must answer the ref's `spec_id` and the same `content_version`. Both recovery steps keep the ref's identity, so a recovered member carries the ref's `spec_id` and `content_version`: a snapshot manifest whose `definition.spec_id` or `content_version` is not the ref's, or a rebuild manifest whose `definition.spec_id` is not the ref's, raises `ContractError` `contract_violation` before any download, which `fetch-ref-expired-rebuild-other-spec` pins for the rebuild. A snapshot refusal other than `artifact_expired` ends the lookup, so `snapshot_not_found` raises `NotFoundError` with no further request. A files route or selector refusal of `artifact_expired`, `artifact_not_found` or `not_found` takes the next step, and a selector file of another digest is not the stored file. A snapshot manifest whose artifacts list no artifact of the ref member's digest sends the client to the selector in the ref member's own rendering, and a file that hashes to that digest gives the dataset, which `fetch-ref-artifact-unlisted` pins. A rebuild that answers another version, or that raises `InvalidRequestError`, `NotFoundError` or `VersionUnavailableError`, ends in `VersionUnavailableError` with the first refusal's code, or `version_unavailable` when nothing refused. Its `newest_version` is the version the rebuild answered, or else the newest stored version, which `GET /datasets/{id}/versions?limit=1` lists alone, as a `newest_version` step finds it, since the route lists versions newest first and needs no key; or null when that route lists none or refuses with `NotFoundError`. Any other refusal of the versions route raises, and a page whose `versions` is not a list of versions each with a `content_version` raises `ContractError` `contract_violation`, which `newest-version-unreadable-page` pins. +- A build answers 200 with the manifest, or 202 with an operation the client polls at `/datasets/operations/{operation_id}`, the id of the operation it holds. A mint's build answers 202. A record whose mint answers 200 fits no mint step. Before each poll it waits the `Retry-After` of the refusal that answered the last poll, whatever its status, as every retry of a refused request waits; else the last operation resource's `retry_after_ms`, else the `Retry-After` of the last answered poll, the response that carried that resource, else a backoff of 1, 2, 4 and then 8 seconds that advances one step each time it is used, a poll after a refusal included. +- A retryable 429 poll spends no retry, and a 429 whose body says it is not retryable raises at once, as a refusal's `retryable` outranks its status, which `fetch-spec-poll-rate-limited-not-retryable` pins. Any other retryable refused poll spends one of the two retries, which a poll that answers restores, and a refusal that is not retryable raises. `fetch-spec-poll-refused` pins two 503s polled again after an answered poll, `fetch-spec-poll-refused-backoff` a 503 with no `Retry-After` among polls no response paces, after which the backoff advances, `fetch-spec-poll-refused-retry-after` a 503 whose `Retry-After` paces the next poll, and `fetch-spec-poll-not-found` a 404 that raises at once. A poll that answers a failed operation whose error is retryable posts the same build once more and polls the operation it starts; a second failure, an error that is not retryable, and a resumed operation, whose build request the client does not hold, raise the operation's error. A refused poll whose code is `operation_failed` is a failed operation with that error. A failed operation whose resource carries no `error` raises `ServerError` with `operation_failed`, retryable by status 500 as a refusal without a document is, which `operation-failed-without-error` pins. A 202 or resumed operation that already reads `failed` raises its error before any poll. +- Any other refusal is retried when it is retryable: as a problem document's `retryable` says, or the website proxy's `retry` of `retry_after_delay`, else when its status is 408, 429, 500, 502, 503 or 504. A client makes two retries by default, and the scenarios assume that default. A build's POST shares those two retries with every other refusal of it, and once a 504 cuts the build off the client posts it once more only, whatever that post answers: a build refused 504 then 503 raises the 503, a build refused 503 then 504 is posted once more after the 504, and a second 504 raises. `fetch-spec-504-then-503`, `fetch-spec-503-then-504` and `fetch-spec-504-twice` pin the three. A refusal that is not retryable, or one past the retries, raises its error. +- Each retry waits the refusal's `Retry-After` when it carries one, and otherwise the client's backoff for that attempt: 0.5 seconds before the first retry, doubling to at most 8. The build's 504 cut-off retry follows the same rule. `retry_waits` pins these waits, and `fetch-spec-504-retry-after` pins a cut-off that carries `Retry-After`. +- A 401 resolves the key again by the key-lookup rule. When the key changed, the client sends the request once more at once, with no wait and spending no retry. When it did not, or the second answer is a 401 too, the 401 raises `AuthenticationError`. A replay's key never changes, so `search-unauthorized` pins the second case and no scenario the first. +- A `request(method, path)` whose `path` is not a path on the base URL, because it starts with `//` or names a scheme, raises `InvalidRequestError` `invalid_argument` before any request. No scenario step makes such a request. +- A 2xx response of a JSON route with no JSON body raises `ContractError` `unexpected_response`. `search-no-json-body` pins it for Search. +- A `Deprecation` or `Sunset` header on an API response, either alone, issues `route_deprecated` once per process per distinct pair of their values, and an `x-dfo-warning` header issues `server_warning` once per process per message. A signed fetch's headers issue nothing. `search-sunset-warning` pins a Sunset header alone, issued once over two responses that carry the same value, and `search-server-warning` pins a repeated `x-dfo-warning` message issued once, a new message issued again, and a Deprecation beside the same Sunset issued as a new pair. +- Python synchronous platform name resolution can exceed the following timeout and deadline limits. Asynchronous name resolution is cancellable. Timeouts follow the clients' design and are not replayed, since the replay advances the clock only by the waits the client asks for: the client's `timeout`, 30 s by default, bounds one request attempt; `search(timeout=60)` bounds the whole search, each attempt reading until that deadline, and None means no limit; `fetch(timeout=1800)` bounds the whole fetch, each download getting the time left on the fetch's deadline; a synchronous build POST, and mint's POST, read for up to 150 s within any outer deadline; `result(timeout=1800)` bounds the wait, and None means no limit. A poll attempt that hangs past the per-attempt timeout spends a retry, and a deadline that passes during a body read raises `DfoTimeoutError` `deadline_exceeded`. In TypeScript an infinite remaining time arms no timer, and a finite one above 2^31-1 ms is clamped. No scenario step takes a timeout. + +## Recording + +`tools/capture_client_contract.py` refreshes the served document and the scenarios. Its `openapi` command calls `dfo_apis.app.create_app()` in process, with the deployed surface flags (Datasets, Graph and Presentation beside Search), in a dfo-apis checkout with no uncommitted changes and no untracked files, over the checkout's own test origin catalogue and test graph release published into a temporary directory, and writes `served/openapi.json` and `served/SOURCE.json`. It refuses an environment that `uv sync --frozen --check` with the five extras below finds out of step with the checkout's `uv.lock`, so the checkout needs its environment first. From the repository root, with the checkout at `../dfo-apis`: + +```bash +uv sync --directory ../dfo-apis --extra eval --extra api --extra engine --extra datasets --extra graph +uv run tools/capture_client_contract.py openapi --dfo-apis ../dfo-apis +``` + +Its `record` command runs every scenario against a base URL, dev's Cloud Run URL by default, checks each live answer still has the shape its scenario names, derives the synthetic scenarios from the fresh records with no request, and then runs the validator. A recorded scenario holds only exchanges the server made, and the run refuses one that a canned exchange answered, and an API response without the `x-dfo-trace-id` header the server sends on every response but a shared-cacheable one, marked `Cache-Control: public`, whose `cache-control` header the record then keeps. The validator refuses a recorded API response with neither. The record names the commit the server's responses name. It fails when the validator reports a problem or the binary bodies pass 5 MB. `--only` records the scenarios it names. `--offline` makes no request. Each recorded scenario's steps run again over its own exchanges and rewrite its `expect`, and each synthetic scenario is derived again from its parent, so a change to the outcome rules or to `client-codes.json` reaches the records without a recording: + +```bash +uv run tools/capture_client_contract.py record --offline --only answer-declined choose-refused-no-choice +``` + +Each record names the commit in the responses' `x-dfo-commit` header, and the run refuses responses that name none or several. Every recorded scenario's `origin.dfo_commit` equals `served/SOURCE.json`'s `commit`, and the validator refuses one that differs, so the records and the served document describe one server. To record against a local app, run the composed app, with the same four surfaces mounted, from the checkout the document came from, with `DFO_BUILD_COMMIT` set to that checkout's commit, then pass its base URL: + +```bash +uv run tools/capture_client_contract.py record --base-url http://127.0.0.1:8083/api +``` + +A record's `origin.base_url` is the base URL the run was given, a local app's included. A local app's signed URL, which its launcher serves at `/__e2e__/blob/{bucket}/{object}` on the API's origin, is written as `https://storage.googleapis.com/{bucket}/{object}` with its query redacted, as a deployment signs it, because a production download is cross-origin and the client sends no key there; the run, like the validator, refuses a record holding any absolute URL other than such a storage URL, or a `location` under the base URL, so a local app's host under another name or port is refused too. A server answers a version it has built inline, so `mint-async-build` and `operation-resume` each need a spec just above the 100,000-row sync budget that the server has not built: the DAC2a recipient flows from 2018 to 2024 for the mint, and from 2017 to 2024 for the resumed operation. A local recording therefore starts on a fresh datasets database with `DATASETS_SYNC_BUDGET_ROWS=100000`. `--scenarios-dir` writes records outside the package, unvalidated. + +## DatasetRef + +`dataset-ref.schema.json` is the frozen format a client writes for `data.ref` and reads back in any language: `format_version: 1` and one or more `members`, each `{parts, sentence, spec: {spec_id, definition}, content_version, artifact: {digest, rendering}}`. `parts` holds the variable text of each answer part the member answers, in query order, and is empty for a spec fetched outside an answer. `definition` is the server's definition unmodified, so it holds the `schema_version`, `spec_id` and `identity` the served `CanonicalDefinition` requires and no other member, and a rebuild posts it as it is. The format takes any integer `schema_version` and leaves the version to the server, which checks it when a rebuild posts the definition. `rendering` is the selector a client matches an artifact on, `{format, bundle}` with `layout: "frame"` for the frame layout, never the server's rendering object. Beyond the schema, each member's `definition.spec_id` equals its `spec.spec_id`, and members hold distinct `spec_id`s. `ref-bare-definition-rejected`, `ref-definition-without-identity-rejected` and `ref-definition-without-schema-version-rejected` pin the definition's required members, and `ref-definition-extra-member-rejected` a member it does not admit. `refs/` holds accepted examples and rejected ones, each `{format_version, name, description, ref}` with `expect: "accept"` or `error`, `{by: "schema"}` or `{by: "rule", reason}`, the reason `definition_spec_id_mismatch` or `repeated_spec_id`. + +## Rules + +`rules/README.md` states the shared rules for credentials, key lookup and format, and disk caching. A rule applies where the client and runtime implement its capability. Python implements disk caching; TypeScript currently keeps no disk cache, so `cache-dir` and `cache-layout` apply to Python. Credentials-file rules apply to runtimes with local credentials support. Each rule's vectors are in `rules/.json`. + +## Validation + +```bash +# Validate the contract against its schemas, the served document and the code registry, +# without importing this package +uv run ../../tools/validate_client_contract.py + +# Replay the rule vectors through a reference implementation of each rule +uv run pytest tests/test_rules.py +``` diff --git a/python/client-contract/pyproject.toml b/python/client-contract/pyproject.toml new file mode 100644 index 0000000..d613df2 --- /dev/null +++ b/python/client-contract/pyproject.toml @@ -0,0 +1,143 @@ +[project] +name = "dfo-spec-kit-client-contract" +version = "0.1.0" +description = "The DFO client contract: the served OpenAPI document, the strict fields, the caller actions per refusal code, the scenario and DatasetRef formats, the client rules and their vectors, shipped as package data." +authors = [ + { name = "ONE Campaign" } +] +readme = "README.md" +requires-python = ">=3.12" +dependencies = [] + +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", +] + +[build-system] +requires = ["uv_build>=0.11.29,<0.12"] +build-backend = "uv_build" + +[tool.uv.build-backend] +# The distribution name (dfo-spec-kit-client-contract) does not match the +# import name (dfo_client_contract) uv_build would otherwise infer it from, so +# it is pinned explicitly. +module-name = ["dfo_client_contract"] +# uv_build ships every non-.py file under the module root by default; this +# pins the contract files explicitly. +source-include = [ + "src/dfo_client_contract/*.json", + "src/dfo_client_contract/served/*.json", + "src/dfo_client_contract/scenarios/*", + "src/dfo_client_contract/refs/*.json", + "src/dfo_client_contract/rules/*", +] + +[dependency-groups] +dev = [ + "pytest>=9.1.0", + "pytest-cov>=7.1.0", + "ty>=0.0.59", + "ruff>=0.15.0", + "pre-commit>=4.6.0", + "jsonschema>=4.23", + "referencing>=0.36", +] + +[tool.ruff] +# Deliberate: kit standard is 88, not 100. +line-length = 88 +target-version = "py312" +extend-include = ["*.ipynb"] + +exclude = [ + ".git", + ".venv", + "venv", + "__pycache__", + "build", + "dist", + "*.egg-info", + ".pytest_cache", + "htmlcov", +] + +[tool.ruff.lint] +select = [ + "E", "W", "F", # pycodestyle, pyflakes + "I", # isort + "N", # pep8-naming + "UP", # pyupgrade + "B", # bugbear + "C4", # comprehensions + "SIM", # simplify + "PL", # pylint + "RUF", # ruff-specific + "ERA", # eradicate (commented-out code) + "PERF", # perflint + "ANN", # flake8-annotations (require type hints on public APIs) +] + +ignore = [ + "E501", # Line length (formatter handles) + "PLR0913", # Too many arguments + "PLR0912", # Too many branches + "PLR0914", # Too many locals + "PLR0915", # Too many statements + "PLR2004", # Magic values + "ANN401", # Allow `Any` in typed signatures +] + +# Allow autofix for all enabled rules +fixable = ["ALL"] +unfixable = [] + +[tool.ruff.lint.per-file-ignores] +# Tests don't need annotations or pylint-complexity gates. +"tests/**/*.py" = ["ANN", "PLR2004"] +# Notebooks: don't require annotations; allow REPL-style patterns. +"**/*.ipynb" = ["ANN", "F401", "F811", "E402"] + +[tool.ruff.lint.pydocstyle] +convention = "google" + +[tool.ruff.format] +quote-style = "double" +indent-style = "space" +skip-magic-trailing-comma = false +line-ending = "auto" + +[tool.ty.environment] +python-version = "3.12" + +[tool.ty.src] +include = ["src/dfo_client_contract"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +python_files = ["test_*.py"] +addopts = "-v --cov=src/dfo_client_contract --cov-report=term --cov-report=xml" + +[tool.coverage.run] +source = ["src"] +branch = true +omit = [ + "*/tests/*", + "*/__pycache__/*", +] + +[tool.coverage.report] +exclude_lines = [ + "pragma: no cover", + "def __repr__", + "def __str__", + "raise AssertionError", + "raise NotImplementedError", + "if __name__ == .__main__.:", + "if TYPE_CHECKING:", +] +show_missing = true +precision = 2 diff --git a/python/client-contract/src/dfo_client_contract/__init__.py b/python/client-contract/src/dfo_client_contract/__init__.py new file mode 100644 index 0000000..2e31e8b --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/__init__.py @@ -0,0 +1,56 @@ +"""The DFO client contract. + +Ships, as package data, what the DFO Python and TypeScript clients generate +from and replay: the served OpenAPI document, the strict fields, the caller +action for each refusal code, the code of each error and warning a client +raises or issues itself, the website proxy's refusal codes, +the scenario and DatasetRef formats with their records, and the client rules +with their vectors. Every accessor reads the installed files through +`importlib.resources`. +""" + +from dfo_client_contract.contract import ( + RULES, + actions, + actions_schema, + client_codes, + client_codes_schema, + contract_dir, + dataset_ref_schema, + openapi, + proxy_codes, + proxy_codes_schema, + ref_examples, + rule, + rules_schema, + scenario_schema, + scenarios, + served_source, + strict_fields, + strict_fields_schema, + warning_codes, + warning_codes_schema, +) + +__all__ = [ + "RULES", + "actions", + "actions_schema", + "client_codes", + "client_codes_schema", + "contract_dir", + "dataset_ref_schema", + "openapi", + "proxy_codes", + "proxy_codes_schema", + "ref_examples", + "rule", + "rules_schema", + "scenario_schema", + "scenarios", + "served_source", + "strict_fields", + "strict_fields_schema", + "warning_codes", + "warning_codes_schema", +] diff --git a/python/client-contract/src/dfo_client_contract/actions.json b/python/client-contract/src/dfo_client_contract/actions.json new file mode 100644 index 0000000..7220529 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/actions.json @@ -0,0 +1,430 @@ +{ + "format_version": 1, + "codes": [ + { + "code": "artifact_expired", + "action": "take_newest_version" + }, + { + "code": "artifact_not_found", + "action": "check_id" + }, + { + "code": "binding_invalid", + "action": "fix_request" + }, + { + "code": "binding_mismatch", + "action": "ask_data_question", + "gap_kind": "no_data" + }, + { + "code": "capability_unavailable", + "action": "fix_request" + }, + { + "code": "children_anchor_ambiguous", + "action": "fix_request" + }, + { + "code": "children_anchor_required", + "action": "fix_request" + }, + { + "code": "code_not_found", + "action": "check_id" + }, + { + "code": "collection_probe_ceiling", + "action": "fix_request" + }, + { + "code": "column_not_droppable", + "action": "fix_request" + }, + { + "code": "column_unknown", + "action": "fix_request" + }, + { + "code": "constraint_violation", + "action": "fix_request" + }, + { + "code": "default_facet_undefined", + "action": "fix_request" + }, + { + "code": "definition_not_reproducible", + "action": "fix_request" + }, + { + "code": "denominator_not_available", + "action": "ask_data_question", + "gap_kind": "no_data" + }, + { + "code": "directional_children_unsupported", + "action": "fix_request" + }, + { + "code": "door_not_implemented", + "action": "report" + }, + { + "code": "edit_conflict", + "action": "fix_request" + }, + { + "code": "entities_unbound", + "action": "fix_request" + }, + { + "code": "entity_ambiguous", + "action": "choose", + "gap_kind": "choice" + }, + { + "code": "entity_not_resolved", + "action": "ask_data_question", + "gap_kind": "not_understood" + }, + { + "code": "entity_role_not_admitted", + "action": "ask_data_question", + "gap_kind": "unsupported" + }, + { + "code": "entity_set_too_large", + "action": "ask_data_question", + "gap_kind": "unsupported" + }, + { + "code": "exact_binding_unsupported", + "action": "fix_request" + }, + { + "code": "excel_illegal_character", + "action": "fix_request" + }, + { + "code": "excel_limit", + "action": "fix_request" + }, + { + "code": "excluded_by_registry", + "action": "fix_request" + }, + { + "code": "facet_binding_unsupported", + "action": "fix_request" + }, + { + "code": "facet_not_available", + "action": "fix_request", + "gap_kind": "no_data" + }, + { + "code": "facet_probe_ceiling", + "action": "fix_request" + }, + { + "code": "frame_not_refreshable", + "action": "fix_request" + }, + { + "code": "frame_unavailable", + "action": "check_id" + }, + { + "code": "identity_collision", + "action": "report" + }, + { + "code": "identity_quarantined", + "action": "report" + }, + { + "code": "internal_error", + "action": "report" + }, + { + "code": "invalid_role_ref", + "action": "fix_request" + }, + { + "code": "member_not_resolvable", + "action": "fix_request" + }, + { + "code": "members_not_held", + "action": "report" + }, + { + "code": "method_not_allowed", + "action": "upgrade" + }, + { + "code": "mixed_peers_anchor_types", + "action": "fix_request" + }, + { + "code": "no_matching_slice", + "action": "ask_data_question", + "gap_kind": "no_data" + }, + { + "code": "no_observations", + "action": "ask_data_question", + "gap_kind": "no_data" + }, + { + "code": "node_not_held", + "action": "check_id" + }, + { + "code": "not_found", + "action": "check_id" + }, + { + "code": "observations_unavailable", + "action": "fix_request" + }, + { + "code": "open_role_unavailable", + "action": "fix_request" + }, + { + "code": "operation_failed", + "action": "report" + }, + { + "code": "operation_not_found", + "action": "check_id" + }, + { + "code": "option_target_invalid", + "action": "fix_request" + }, + { + "code": "over_ceiling", + "action": "fix_request" + }, + { + "code": "parquet_size_bound", + "action": "fix_request" + }, + { + "code": "pin_not_permitted", + "action": "request_scope" + }, + { + "code": "pivot_not_homogeneous", + "action": "fix_request" + }, + { + "code": "pivot_not_unique", + "action": "fix_request" + }, + { + "code": "pivot_over_cell_cap", + "action": "fix_request" + }, + { + "code": "pivot_over_column_cap", + "action": "fix_request" + }, + { + "code": "population_empty", + "action": "fix_request" + }, + { + "code": "provider_ambiguous", + "action": "fix_request" + }, + { + "code": "publish_conflict", + "action": "fix_request" + }, + { + "code": "publish_not_permitted", + "action": "request_scope" + }, + { + "code": "qualifier_not_bound", + "action": "ask_data_question", + "gap_kind": "not_understood" + }, + { + "code": "query_too_long", + "action": "fix_request" + }, + { + "code": "rate_coverage_gap", + "action": "fix_request", + "gap_kind": "no_data" + }, + { + "code": "recipe_not_declared", + "action": "fix_request" + }, + { + "code": "recipe_not_found", + "action": "check_id" + }, + { + "code": "refresh_not_permitted", + "action": "request_scope" + }, + { + "code": "release_mismatch", + "action": "upgrade" + }, + { + "code": "render_target_mismatch", + "action": "fix_request" + }, + { + "code": "rendering_not_recorded", + "action": "fix_request" + }, + { + "code": "request_invalid", + "action": "fix_request" + }, + { + "code": "resolution_ambiguous", + "action": "fix_request" + }, + { + "code": "resource_exhausted", + "action": "fix_request" + }, + { + "code": "role_incompatible", + "action": "fix_request", + "gap_kind": "unsupported" + }, + { + "code": "role_not_resolved", + "action": "choose", + "gap_kind": "choice" + }, + { + "code": "role_signature_incompatible", + "action": "fix_request", + "gap_kind": "unsupported" + }, + { + "code": "rollup_not_summable", + "action": "fix_request" + }, + { + "code": "schema_invalid", + "action": "fix_request" + }, + { + "code": "scope_too_broad", + "action": "fix_request" + }, + { + "code": "service_unavailable", + "action": "report" + }, + { + "code": "shape_mismatch", + "action": "fix_request" + }, + { + "code": "skill_not_found", + "action": "check_id" + }, + { + "code": "skill_resource_not_found", + "action": "check_id" + }, + { + "code": "snapshot_not_found", + "action": "check_id" + }, + { + "code": "snapshot_revoked", + "action": "take_newest_version" + }, + { + "code": "source_ambiguous", + "action": "choose", + "gap_kind": "choice" + }, + { + "code": "source_code_ambiguous", + "action": "choose", + "gap_kind": "choice" + }, + { + "code": "source_code_not_held", + "action": "ask_data_question", + "gap_kind": "no_data" + }, + { + "code": "source_code_shares_variable", + "action": "ask_data_question", + "gap_kind": "unsupported" + }, + { + "code": "source_not_resolved", + "action": "ask_data_question", + "gap_kind": "not_understood" + }, + { + "code": "spec_id_mismatch", + "action": "fix_request" + }, + { + "code": "spec_not_exportable", + "action": "fix_request" + }, + { + "code": "spec_not_found", + "action": "check_id" + }, + { + "code": "timeout", + "action": "report" + }, + { + "code": "unit_not_resolved", + "action": "ask_data_question", + "gap_kind": "not_understood" + }, + { + "code": "unsupported_children_anchor_type", + "action": "fix_request" + }, + { + "code": "unsupported_peers_anchor_type", + "action": "fix_request" + }, + { + "code": "unsupported_schema_version", + "action": "upgrade" + }, + { + "code": "upstream_error", + "action": "report" + }, + { + "code": "upstream_version_changed", + "action": "report" + }, + { + "code": "variable_not_resolved", + "action": "ask_data_question", + "gap_kind": "not_understood" + }, + { + "code": "write_refused", + "action": "request_scope" + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/actions.schema.json b/python/client-contract/src/dfo_client_contract/actions.schema.json new file mode 100644 index 0000000..70c6fa2 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/actions.schema.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/actions.schema.json", + "title": "Caller actions", + "description": "The next step a client caller takes for each active refusal code that reaches a problem document or a no_data reason, sorted by code. A code with a no_data_reason mapping also names the gap kind a no_data part with that reason becomes.", + "type": "object", + "additionalProperties": false, + "required": [ + "format_version", + "codes" + ], + "properties": { + "format_version": { + "const": 1 + }, + "codes": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "code", + "action" + ], + "properties": { + "code": { + "type": "string", + "pattern": "^[a-z][a-z0-9]*(_[a-z0-9]+)*$" + }, + "action": { + "enum": [ + "fix_request", + "check_id", + "choose", + "ask_data_question", + "take_newest_version", + "log_in", + "request_scope", + "wait", + "wait_for_reset", + "report", + "upgrade" + ] + }, + "gap_kind": { + "enum": [ + "choice", + "no_data", + "not_understood", + "unsupported" + ] + } + } + } + } + } +} diff --git a/python/client-contract/src/dfo_client_contract/client-codes.json b/python/client-contract/src/dfo_client_contract/client-codes.json new file mode 100644 index 0000000..f1bedd5 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/client-codes.json @@ -0,0 +1,107 @@ +{ + "format_version": 1, + "codes": [ + { + "code": "answer_declined", + "class": "DeclinedError", + "retryable": false, + "condition": "Fetching an answer Search declined or answered with the catalogue." + }, + { + "code": "answer_incomplete", + "class": "IncompleteAnswerError", + "retryable": false, + "condition": "Fetching an answer with a part that has no reading, when the fetch is not partial or no part has a reading." + }, + { + "code": "choice_invalid", + "class": "InvalidRequestError", + "retryable": false, + "condition": "A choice whose part or option names no gap, several gaps or no option, or a choice that cannot post back a part." + }, + { + "code": "contract_violation", + "class": "ContractError", + "retryable": false, + "condition": "A response lacks a member the client acts on, or holds one that contradicts the request." + }, + { + "code": "credentials_file_invalid", + "class": "AuthenticationError", + "retryable": false, + "condition": "The credentials file breaks the credentials-file rule." + }, + { + "code": "deadline_exceeded", + "class": "DfoTimeoutError", + "retryable": true, + "condition": "The call's deadline passed before it finished." + }, + { + "code": "digest_mismatch", + "class": "ServerError", + "retryable": false, + "condition": "A downloaded file does not hash to the digest its manifest names, after the files route was asked once more." + }, + { + "code": "download_failed", + "class": "ServerError", + "retryable": true, + "condition": "The signed URL a files route names refused, or its fetch failed, after the route was asked once more." + }, + { + "code": "invalid_argument", + "class": "InvalidRequestError", + "retryable": false, + "condition": "A call's arguments break a rule the client checks before any request." + }, + { + "code": "key_empty", + "class": "AuthenticationError", + "retryable": false, + "condition": "The api_key argument is an empty string." + }, + { + "code": "network_error", + "class": "NetworkError", + "retryable": true, + "condition": "The connection failed before a response arrived." + }, + { + "code": "offline", + "class": "NetworkError", + "retryable": false, + "condition": "DFO_OFFLINE=1 is set, and the call needs the server." + }, + { + "code": "profile_not_found", + "class": "AuthenticationError", + "retryable": false, + "condition": "DFO_PROFILE names a profile the credentials file lacks." + }, + { + "code": "profile_without_key", + "class": "AuthenticationError", + "retryable": false, + "condition": "The chosen profile in the credentials file has no key." + }, + { + "code": "refusal_without_code", + "class": "by_status", + "retryable": "by_status", + "condition": "A refusal whose body carries no code: neither a problem document nor the website proxy's own body." + }, + { + "code": "unexpected_response", + "class": "ContractError", + "retryable": false, + "condition": "A response of a status or form the call does not act on: a redirect it does not follow, a body that is not JSON, or a status the route does not answer." + }, + { + "code": "version_unavailable", + "class": "VersionUnavailableError", + "retryable": false, + "condition": "A stored version can no longer be fetched, and no refusal names why." + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/client-codes.schema.json b/python/client-contract/src/dfo_client_contract/client-codes.schema.json new file mode 100644 index 0000000..ab0f20b --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/client-codes.schema.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/client-codes.schema.json", + "title": "Client codes", + "description": "Each code a client sets on an error it raises when no problem document carries one, with the error class it raises and the condition, sorted by code. A server refusal's error keeps the server's code.", + "type": "object", + "additionalProperties": false, + "required": [ + "format_version", + "codes" + ], + "properties": { + "format_version": { + "const": 1 + }, + "codes": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "code", + "class", + "retryable", + "condition" + ], + "properties": { + "code": { + "type": "string", + "pattern": "^[a-z][a-z0-9]*(_[a-z0-9]+)*$" + }, + "class": { + "description": "The error class the client raises, one the scenario schema names, or by_status for the class a refusal's HTTP status maps to.", + "type": "string", + "pattern": "^([A-Z][A-Za-z]*|by_status)$" + }, + "retryable": { + "description": "Whether the error is one a caller may retry, which both clients set as the error's retryable flag; by_status for the error whose class its status maps to, retryable as that status is.", + "oneOf": [ + { + "type": "boolean" + }, + { + "const": "by_status" + } + ] + }, + "condition": { + "description": "The condition, in one line.", + "type": "string", + "minLength": 1, + "not": { + "pattern": "\\n" + } + } + } + } + } + } +} diff --git a/python/client-contract/src/dfo_client_contract/contract.py b/python/client-contract/src/dfo_client_contract/contract.py new file mode 100644 index 0000000..9503495 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/contract.py @@ -0,0 +1,143 @@ +"""The packaged contract files, read from package data.""" + +from __future__ import annotations + +import json +from importlib import resources +from pathlib import Path +from typing import Any + +# The rules under `rules/`, each a file of vectors named after the rule. +RULES = ( + "key-format", + "credentials-path", + "credentials-file", + "key-lookup", + "cache-dir", + "cache-layout", +) + + +def contract_dir() -> Path: + """The installed contract directory. + + Resolves through `importlib.resources`, so it works from a repo checkout + and from an installed wheel. A scenario's binary body file sits in its + `scenarios/` directory. + """ + return Path(str(resources.files("dfo_client_contract"))) + + +def _load(relative: str) -> Any: + return json.loads((contract_dir() / relative).read_text(encoding="utf-8")) + + +def _records(directory: str) -> list[dict[str, Any]]: + paths = sorted((contract_dir() / directory).glob("*.json")) + if not paths: + raise RuntimeError(f"no records found under dfo_client_contract/{directory}") + return [json.loads(path.read_text(encoding="utf-8")) for path in paths] + + +def openapi() -> dict[str, Any]: + """`served/openapi.json`: the composed dfo-apis app's OpenAPI document.""" + return _load("served/openapi.json") + + +def served_source() -> dict[str, Any]: + """`served/SOURCE.json`: the dfo-apis commit `openapi()` was captured from.""" + return _load("served/SOURCE.json") + + +def strict_fields() -> dict[str, Any]: + """`strict-fields.json`: the response members the clients act on.""" + return _load("strict-fields.json") + + +def strict_fields_schema() -> dict[str, Any]: + """`strict-fields.schema.json`: the shape of `strict-fields.json`.""" + return _load("strict-fields.schema.json") + + +def actions() -> dict[str, Any]: + """`actions.json`: the caller's next step for each refusal code.""" + return _load("actions.json") + + +def actions_schema() -> dict[str, Any]: + """`actions.schema.json`: the shape of `actions.json`.""" + return _load("actions.schema.json") + + +def client_codes() -> dict[str, Any]: + """`client-codes.json`: the code of each error a client raises itself.""" + return _load("client-codes.json") + + +def client_codes_schema() -> dict[str, Any]: + """`client-codes.schema.json`: the shape of `client-codes.json`.""" + return _load("client-codes.schema.json") + + +def proxy_codes() -> dict[str, Any]: + """`proxy-codes.json`: the codes of the website proxy's own refusals.""" + return _load("proxy-codes.json") + + +def proxy_codes_schema() -> dict[str, Any]: + """`proxy-codes.schema.json`: the shape of `proxy-codes.json`.""" + return _load("proxy-codes.schema.json") + + +def warning_codes() -> dict[str, Any]: + """`warning-codes.json`: the code of each warning a client issues itself.""" + return _load("warning-codes.json") + + +def warning_codes_schema() -> dict[str, Any]: + """`warning-codes.schema.json`: the shape of `warning-codes.json`.""" + return _load("warning-codes.schema.json") + + +def scenario_schema() -> dict[str, Any]: + """`scenario.schema.json`: the shape of one scenario record.""" + return _load("scenario.schema.json") + + +def dataset_ref_schema() -> dict[str, Any]: + """`dataset-ref.schema.json`: the frozen DatasetRef format.""" + return _load("dataset-ref.schema.json") + + +def rules_schema() -> dict[str, Any]: + """`rules/rules.schema.json`: the shape of every rule file.""" + return _load("rules/rules.schema.json") + + +def scenarios() -> list[dict[str, Any]]: + """Every scenario record, sorted by file name. + + Raises: + RuntimeError: No scenario record is installed. + """ + return _records("scenarios") + + +def ref_examples() -> list[dict[str, Any]]: + """Every DatasetRef example, sorted by file name. + + Raises: + RuntimeError: No example is installed. + """ + return _records("refs") + + +def rule(name: str) -> dict[str, Any]: + """The vector file for rule `name`, one of `RULES`. + + Raises: + ValueError: `name` is not in `RULES`. + """ + if name not in RULES: + raise ValueError(f"unknown rule {name!r}; expected one of {RULES}") + return _load(f"rules/{name}.json") diff --git a/python/client-contract/src/dfo_client_contract/dataset-ref.schema.json b/python/client-contract/src/dfo_client_contract/dataset-ref.schema.json new file mode 100644 index 0000000..88cbedf --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/dataset-ref.schema.json @@ -0,0 +1,132 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/dataset-ref.schema.json", + "title": "DatasetRef", + "description": "The frozen reference to the exact versions a dataset holds. Every DFO client writes and reads this format, so a ref saved by one language loads in another.", + "type": "object", + "additionalProperties": false, + "required": [ + "format_version", + "members" + ], + "properties": { + "format_version": { + "const": 1 + }, + "members": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/member" + } + } + }, + "$defs": { + "member": { + "type": "object", + "additionalProperties": false, + "required": [ + "parts", + "sentence", + "spec", + "content_version", + "artifact" + ], + "properties": { + "parts": { + "description": "The variable text of each answer part this member answers, in query order. Empty for a spec fetched outside an answer.", + "type": "array", + "items": { + "type": "string", + "minLength": 1 + } + }, + "sentence": { + "description": "Search's rendered sentence for the built identity.", + "type": "string", + "minLength": 1 + }, + "spec": { + "type": "object", + "additionalProperties": false, + "required": [ + "spec_id", + "definition" + ], + "properties": { + "spec_id": { + "$ref": "#/$defs/spec_id" + }, + "definition": { + "description": "The server's definition for spec_id, unmodified. It holds the members the served CanonicalDefinition admits, each it requires and no other, so a rebuild can post it as it is.", + "type": "object", + "additionalProperties": false, + "required": [ + "schema_version", + "spec_id", + "identity" + ], + "properties": { + "schema_version": { + "type": "integer" + }, + "spec_id": { + "$ref": "#/$defs/spec_id" + }, + "identity": { + "type": "object" + } + } + } + } + }, + "content_version": { + "type": "string", + "pattern": "^cv_[0-9a-f]{32}$" + }, + "artifact": { + "type": "object", + "additionalProperties": false, + "required": [ + "digest", + "rendering" + ], + "properties": { + "digest": { + "type": "string", + "pattern": "^sha256:[0-9a-f]{64}$" + }, + "rendering": { + "description": "The selector a client matches an artifact's rendering on. Never the server's rendering object.", + "type": "object", + "additionalProperties": false, + "required": [ + "format", + "bundle" + ], + "properties": { + "format": { + "enum": [ + "csv", + "xlsx", + "parquet" + ] + }, + "bundle": { + "type": "boolean" + }, + "layout": { + "const": "frame" + } + } + } + } + } + } + }, + "spec_id": { + "type": "string", + "pattern": "^spec_[0-9a-f]{32}$" + } + } +} diff --git a/python/client-contract/src/dfo_client_contract/proxy-codes.json b/python/client-contract/src/dfo_client_contract/proxy-codes.json new file mode 100644 index 0000000..abba574 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/proxy-codes.json @@ -0,0 +1,15 @@ +{ + "format_version": 1, + "codes": [ + { + "code": "rate_limited", + "status": 429, + "condition": "The website proxy's rate limit for the caller's address is spent; the response carries Retry-After." + }, + { + "code": "transient_unavailable", + "status": 502, + "condition": "The website proxy could not reach the API behind it." + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json b/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json new file mode 100644 index 0000000..6cec2dd --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json @@ -0,0 +1,49 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/proxy-codes.schema.json", + "title": "Proxy codes", + "description": "Each code the website proxy's own {error, retry, detail} body carries in error, with the HTTP status it answers and the condition, sorted by code. A client raises such a refusal with the error's code and the class its status maps to.", + "type": "object", + "additionalProperties": false, + "required": [ + "format_version", + "codes" + ], + "properties": { + "format_version": { + "const": 1 + }, + "codes": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "code", + "status", + "condition" + ], + "properties": { + "code": { + "type": "string", + "pattern": "^[a-z][a-z0-9]*(_[a-z0-9]+)*$" + }, + "status": { + "type": "integer", + "minimum": 400, + "maximum": 599 + }, + "condition": { + "description": "The condition, in one line.", + "type": "string", + "minLength": 1, + "not": { + "pattern": "\\n" + } + } + } + } + } + } +} diff --git a/python/client-contract/src/dfo_client_contract/py.typed b/python/client-contract/src/dfo_client_contract/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-answer-member.json b/python/client-contract/src/dfo_client_contract/refs/ref-answer-member.json new file mode 100644 index 0000000..7ca8187 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-answer-member.json @@ -0,0 +1,97 @@ +{ + "format_version": 1, + "name": "ref-answer-member", + "description": "A member built from an answer names the part it answers.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "ODA disbursements for basic health care" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "expect": "accept" +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-bare-definition-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-bare-definition-rejected.json new file mode 100644 index 0000000..232a9f8 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-bare-definition-rejected.json @@ -0,0 +1,31 @@ +{ + "format_version": 1, + "name": "ref-bare-definition-rejected", + "description": "A member's definition is the server's whole definition, with its schema_version and identity beside its spec_id.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6" + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "error": { + "by": "schema" + } +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-definition-extra-member-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-definition-extra-member-rejected.json new file mode 100644 index 0000000..0a71366 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-definition-extra-member-rejected.json @@ -0,0 +1,98 @@ +{ + "format_version": 1, + "name": "ref-definition-extra-member-rejected", + "description": "A member's definition holds only the members the served CanonicalDefinition admits.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "error": { + "by": "schema" + } +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-definition-spec-id-mismatch-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-definition-spec-id-mismatch-rejected.json new file mode 100644 index 0000000..efe42b8 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-definition-spec-id-mismatch-rejected.json @@ -0,0 +1,96 @@ +{ + "format_version": 1, + "name": "ref-definition-spec-id-mismatch-rejected", + "description": "A member's definition is the definition for its own spec_id.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "error": { + "by": "rule", + "reason": "definition_spec_id_mismatch" + } +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-definition-without-identity-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-definition-without-identity-rejected.json new file mode 100644 index 0000000..b2b93fd --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-definition-without-identity-rejected.json @@ -0,0 +1,32 @@ +{ + "format_version": 1, + "name": "ref-definition-without-identity-rejected", + "description": "A member's definition holds its identity.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6" + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "error": { + "by": "schema" + } +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-definition-without-schema-version-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-definition-without-schema-version-rejected.json new file mode 100644 index 0000000..9cc8ed9 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-definition-without-schema-version-rejected.json @@ -0,0 +1,96 @@ +{ + "format_version": 1, + "name": "ref-definition-without-schema-version-rejected", + "description": "A member's definition holds its schema_version.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "error": { + "by": "schema" + } +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-frame-layout.json b/python/client-contract/src/dfo_client_contract/refs/ref-frame-layout.json new file mode 100644 index 0000000..eb52150 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-frame-layout.json @@ -0,0 +1,96 @@ +{ + "format_version": 1, + "name": "ref-frame-layout", + "description": "A member fetched with layout frame names the frame layout in its rendering.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false, + "layout": "frame" + } + } + } + ] + }, + "expect": "accept" +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-no-members-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-no-members-rejected.json new file mode 100644 index 0000000..ac72242 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-no-members-rejected.json @@ -0,0 +1,12 @@ +{ + "format_version": 1, + "name": "ref-no-members-rejected", + "description": "A ref holds at least one member.", + "ref": { + "format_version": 1, + "members": [] + }, + "error": { + "by": "schema" + } +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-one-member.json b/python/client-contract/src/dfo_client_contract/refs/ref-one-member.json new file mode 100644 index 0000000..544cd44 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-one-member.json @@ -0,0 +1,95 @@ +{ + "format_version": 1, + "name": "ref-one-member", + "description": "A ref to one bare long Parquet version, the member of fetch-spec-known-sentence.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "expect": "accept" +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-repeated-spec-id-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-repeated-spec-id-rejected.json new file mode 100644 index 0000000..7c4df56 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-repeated-spec-id-rejected.json @@ -0,0 +1,184 @@ +{ + "format_version": 1, + "name": "ref-repeated-spec-id-rejected", + "description": "Each member holds a distinct spec_id.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + }, + { + "parts": [ + "ODA disbursements for basic health care" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + }, + "error": { + "by": "rule", + "reason": "repeated_spec_id" + } +} diff --git a/python/client-contract/src/dfo_client_contract/refs/ref-server-rendering-rejected.json b/python/client-contract/src/dfo_client_contract/refs/ref-server-rendering-rejected.json new file mode 100644 index 0000000..5ba2ee1 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/refs/ref-server-rendering-rejected.json @@ -0,0 +1,98 @@ +{ + "format_version": 1, + "name": "ref-server-rendering-rejected", + "description": "The server's rendering object, with its integer layout, is not the selector a ref stores.", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "artifact": { + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + } + } + } + ] + }, + "error": { + "by": "schema" + } +} diff --git a/python/client-contract/src/dfo_client_contract/rules/README.md b/python/client-contract/src/dfo_client_contract/rules/README.md new file mode 100644 index 0000000..fdd4a5e --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/README.md @@ -0,0 +1,61 @@ +# Client rules + +Clients implement these rules for the capabilities available in their runtime. Python implements every rule. TypeScript implements the key and credentials rules in Node; browser runtimes use the key sources available there. TypeScript currently keeps no disk cache, so `cache-dir` and `cache-layout` apply to Python. Clients implementing the same capability use the same rules and formats. Each rule's vectors are in `.json`, validated by `rules.schema.json`. In a vector, `env` lists the environment variables set, and an empty value counts as unset everywhere below. + +## Credentials path (`credentials-path`) + +The credentials file is the first of: + +1. `$DFO_CREDENTIALS_FILE`, as given; +1. on Linux and macOS, `$XDG_CONFIG_HOME/dfo/credentials.toml`, else `~/.config/dfo/credentials.toml`; +1. on Windows, `%APPDATA%\dfo\credentials.toml`, else `\AppData\Roaming\dfo\credentials.toml`. + +Windows ignores `XDG_CONFIG_HOME`. + +## Credentials file (`credentials-file`) + +The file is UTF-8 text in a subset of TOML, so any TOML reader reads the same profiles. Lines split on `\n`, and a line drops a final `\r` and its surrounding spaces and tabs. A line is then one of: + +- empty, or a comment starting with `#`; +- a table header `[name]`, which opens the profile `name`; +- an entry `name = "value"`, with spaces or tabs allowed around `=`, which sets `name` in the open profile. + +A name is one or more of `A-Z`, `a-z`, `0-9`, `_` and `-`. A value holds no `"`, no `\` and no control character, so it needs no escape. A profile keeps every entry it holds; a client reads `key`. The first broken line refuses the file with its 1-based line number and a reason: `outside_table` for an entry before any header, `duplicate_table` for a header seen before, `duplicate_key` for a name its profile already holds, and `invalid_line` for anything else, a trailing comment included. Only the Python CLI writes the file, readable by its owner only. + +## Key lookup (`key-lookup`) + +A client resolves its key when it is built, and again after a 401. The first source found wins: + +1. the `api_key` argument: a key, or `false` to force anonymous use; an empty string raises `key_empty`; +1. `DFO_API_KEY`; +1. the credentials file at the credentials path, profile `$DFO_PROFILE`, else `default`; +1. inside Colab, a notebook secret named `DFO_API_KEY`; +1. otherwise, anonymous. + +A missing file goes on to the next source, and so does a missing `default` profile. A file that fails to parse raises `credentials_file_invalid`, a profile named by `DFO_PROFILE` that the file lacks raises `profile_not_found`, and a chosen profile with no `key`, or an empty one, raises `profile_without_key`. The file is read only when no earlier source wins. The argument may also be a callable or a key object, called or unwrapped when the client resolves the key. The vectors pass strings, and the Colab source has no vectors. + +## Key format (`key-format`) + +A secret key is `dfo_k_`, then a base62 body, then a 6-character checksum; `dfo_p_` marks a browser-safe key. Base62 is `0-9A-Za-z` in that order. The checksum is the CRC32 (ISO-HDLC, as zlib computes it) of the body's ASCII bytes, written in base62 and left-padded with `0` to six characters. Issued keys have a 32-character body, 44 characters in all, but the check ignores length. The last six characters after the prefix are the checksum and the rest is the body. + +The check runs in order and reports the first failure: `unknown_prefix` when the key starts with neither prefix, `not_base62` when a character after the prefix is outside base62, and `checksum_mismatch` when the body is empty or its checksum differs. A failure warns with the code `key_` from `warning-codes.json`, such as `key_checksum_mismatch`, and the client sends the key anyway, so a change of key format forces no upgrade. + +## Cache directory (`cache-dir`) + +The cache root is the first of, as readerkit's `resolve_cache_dir(app="dfo", ...)` resolves it: + +1. the `cache_dir` argument; +1. `DFO_CACHE_DIR`; +1. `BBLOCKS_CACHE_DIR`; +1. the platform cache directory for `readerkit`: on Linux `$XDG_CACHE_HOME/readerkit`, else `~/.cache/readerkit`; on macOS `~/Library/Caches/readerkit`; on Windows `\readerkit\Cache`, which the vectors give as `LOCALAPPDATA`. + +A leading `~` expands to the home directory. The cache directory is `/v1/dfo/cache1`: `v1` is readerkit's own layout version, `dfo` the app, and `cache1` the client cache's layout version. Clients and releases implementing `cache1` share this layout. + +## Cache layout (`cache-layout`) + +Inside the cache directory: + +- a downloaded artifact is `files/sha256/`, keyed by its digest; +- a manifest is `manifests///.json`, where `` is the format, then `-bundle` for a bundle, then `-frame` for the frame layout: `parquet`, `parquet-frame`, `csv-bundle`. + +A client writes an entry to a temporary name in the same directory and renames it into place, so a reader sees a complete entry. Concurrent writers of one content-addressed artifact write identical bytes. Manifest updates can replace another complete manifest and lose a cache candidate, so cache availability is best-effort. A read re-hashes an artifact, and a mismatch counts as a miss. diff --git a/python/client-contract/src/dfo_client_contract/rules/cache-dir.json b/python/client-contract/src/dfo_client_contract/rules/cache-dir.json new file mode 100644 index 0000000..dfb3de9 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/cache-dir.json @@ -0,0 +1,109 @@ +{ + "format_version": 1, + "rule": "cache-dir", + "vectors": [ + { + "name": "argument-wins", + "platform": "linux", + "home": "/home/ana", + "cache_dir": "/data/cache", + "env": { + "DFO_CACHE_DIR": "/env/dfo", + "BBLOCKS_CACHE_DIR": "/env/bblocks" + }, + "root": "/data/cache", + "directory": "/data/cache/v1/dfo/cache1" + }, + { + "name": "argument-with-home-expands", + "platform": "macos", + "home": "/Users/ana", + "cache_dir": "~/dfo-cache", + "env": {}, + "root": "/Users/ana/dfo-cache", + "directory": "/Users/ana/dfo-cache/v1/dfo/cache1" + }, + { + "name": "dfo-variable", + "platform": "linux", + "home": "/home/ana", + "env": { + "DFO_CACHE_DIR": "/env/dfo", + "BBLOCKS_CACHE_DIR": "/env/bblocks" + }, + "root": "/env/dfo", + "directory": "/env/dfo/v1/dfo/cache1" + }, + { + "name": "family-variable", + "platform": "linux", + "home": "/home/ana", + "env": { + "BBLOCKS_CACHE_DIR": "/env/bblocks" + }, + "root": "/env/bblocks", + "directory": "/env/bblocks/v1/dfo/cache1" + }, + { + "name": "empty-variables-count-as-unset", + "platform": "linux", + "home": "/home/ana", + "env": { + "DFO_CACHE_DIR": "", + "BBLOCKS_CACHE_DIR": "", + "XDG_CACHE_HOME": "" + }, + "root": "/home/ana/.cache/readerkit", + "directory": "/home/ana/.cache/readerkit/v1/dfo/cache1" + }, + { + "name": "xdg-cache-home-on-linux", + "platform": "linux", + "home": "/home/ana", + "env": { + "XDG_CACHE_HOME": "/home/ana/.xdg-cache" + }, + "root": "/home/ana/.xdg-cache/readerkit", + "directory": "/home/ana/.xdg-cache/readerkit/v1/dfo/cache1" + }, + { + "name": "platform-default-on-linux", + "platform": "linux", + "home": "/home/ana", + "env": {}, + "root": "/home/ana/.cache/readerkit", + "directory": "/home/ana/.cache/readerkit/v1/dfo/cache1" + }, + { + "name": "platform-default-on-macos", + "platform": "macos", + "home": "/Users/ana", + "env": { + "XDG_CACHE_HOME": "/Users/ana/.xdg-cache" + }, + "root": "/Users/ana/Library/Caches/readerkit", + "directory": "/Users/ana/Library/Caches/readerkit/v1/dfo/cache1" + }, + { + "name": "platform-default-on-windows", + "platform": "windows", + "home": "C:\\Users\\ana", + "env": { + "LOCALAPPDATA": "C:\\Users\\ana\\AppData\\Local" + }, + "root": "C:\\Users\\ana\\AppData\\Local\\readerkit\\Cache", + "directory": "C:\\Users\\ana\\AppData\\Local\\readerkit\\Cache\\v1\\dfo\\cache1" + }, + { + "name": "dfo-variable-on-windows", + "platform": "windows", + "home": "C:\\Users\\ana", + "env": { + "DFO_CACHE_DIR": "D:\\cache", + "LOCALAPPDATA": "C:\\Users\\ana\\AppData\\Local" + }, + "root": "D:\\cache", + "directory": "D:\\cache\\v1\\dfo\\cache1" + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/rules/cache-layout.json b/python/client-contract/src/dfo_client_contract/rules/cache-layout.json new file mode 100644 index 0000000..9a63b8a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/cache-layout.json @@ -0,0 +1,46 @@ +{ + "format_version": 1, + "rule": "cache-layout", + "vectors": [ + { + "name": "file-by-digest", + "entry": "file", + "digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "path": "files/sha256/e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "name": "manifest-long-parquet", + "entry": "manifest", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "rendering": { + "format": "parquet", + "bundle": false + }, + "path": "manifests/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/parquet.json" + }, + { + "name": "manifest-frame-parquet", + "entry": "manifest", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "rendering": { + "format": "parquet", + "bundle": false, + "layout": "frame" + }, + "path": "manifests/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/parquet-frame.json" + }, + { + "name": "manifest-csv-bundle", + "entry": "manifest", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "rendering": { + "format": "csv", + "bundle": true + }, + "path": "manifests/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/csv-bundle.json" + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/rules/credentials-file.json b/python/client-contract/src/dfo_client_contract/rules/credentials-file.json new file mode 100644 index 0000000..8dc296f --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/credentials-file.json @@ -0,0 +1,131 @@ +{ + "format_version": 1, + "rule": "credentials-file", + "vectors": [ + { + "name": "one-profile", + "text": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n", + "profiles": { + "default": { + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe" + } + } + }, + { + "name": "two-profiles-comments-and-blank-lines", + "text": "# written by dfo auth login\n\n[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey=\"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "profiles": { + "default": { + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe" + }, + "ci": { + "key": "dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc" + } + } + }, + { + "name": "whitespace-and-crlf", + "text": " [default] \r\n\tkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\" \r\n", + "profiles": { + "default": { + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe" + } + } + }, + { + "name": "other-keys-are-kept", + "text": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\nlabel = \"laptop\"\n", + "profiles": { + "default": { + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe", + "label": "laptop" + } + } + }, + { + "name": "empty-file", + "text": "", + "profiles": {} + }, + { + "name": "empty-table", + "text": "[default]\n", + "profiles": { + "default": {} + } + }, + { + "name": "entry-before-any-table", + "text": "key = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n", + "error": { + "reason": "outside_table", + "line": 1 + } + }, + { + "name": "duplicate-table", + "text": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n[default]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "error": { + "reason": "duplicate_table", + "line": 3 + } + }, + { + "name": "duplicate-key", + "text": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "error": { + "reason": "duplicate_key", + "line": 3 + } + }, + { + "name": "single-quoted-value", + "text": "[default]\nkey = 'dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe'\n", + "error": { + "reason": "invalid_line", + "line": 2 + } + }, + { + "name": "escape-in-value", + "text": "[default]\nkey = \"dfo\\\\k\"\n", + "error": { + "reason": "invalid_line", + "line": 2 + } + }, + { + "name": "trailing-comment", + "text": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\" # laptop\n", + "error": { + "reason": "invalid_line", + "line": 2 + } + }, + { + "name": "dotted-table", + "text": "[dfo.default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n", + "error": { + "reason": "invalid_line", + "line": 1 + } + }, + { + "name": "unquoted-value", + "text": "[default]\nkey = dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\n", + "error": { + "reason": "invalid_line", + "line": 2 + } + }, + { + "name": "empty-value-parses", + "text": "[default]\nkey = \"\"\n", + "profiles": { + "default": { + "key": "" + } + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/rules/credentials-path.json b/python/client-contract/src/dfo_client_contract/rules/credentials-path.json new file mode 100644 index 0000000..612b049 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/credentials-path.json @@ -0,0 +1,94 @@ +{ + "format_version": 1, + "rule": "credentials-path", + "vectors": [ + { + "name": "explicit-file-wins", + "platform": "linux", + "home": "/home/ana", + "env": { + "DFO_CREDENTIALS_FILE": "/etc/dfo/ci.toml", + "XDG_CONFIG_HOME": "/home/ana/.xdg" + }, + "path": "/etc/dfo/ci.toml" + }, + { + "name": "explicit-file-wins-on-windows", + "platform": "windows", + "home": "C:\\Users\\ana", + "env": { + "DFO_CREDENTIALS_FILE": "D:\\keys\\dfo.toml", + "APPDATA": "C:\\Users\\ana\\AppData\\Roaming" + }, + "path": "D:\\keys\\dfo.toml" + }, + { + "name": "xdg-config-home-on-linux", + "platform": "linux", + "home": "/home/ana", + "env": { + "XDG_CONFIG_HOME": "/home/ana/.xdg" + }, + "path": "/home/ana/.xdg/dfo/credentials.toml" + }, + { + "name": "xdg-config-home-on-macos", + "platform": "macos", + "home": "/Users/ana", + "env": { + "XDG_CONFIG_HOME": "/Users/ana/.xdg" + }, + "path": "/Users/ana/.xdg/dfo/credentials.toml" + }, + { + "name": "default-on-linux", + "platform": "linux", + "home": "/home/ana", + "env": {}, + "path": "/home/ana/.config/dfo/credentials.toml" + }, + { + "name": "default-on-macos", + "platform": "macos", + "home": "/Users/ana", + "env": {}, + "path": "/Users/ana/.config/dfo/credentials.toml" + }, + { + "name": "empty-values-count-as-unset", + "platform": "linux", + "home": "/home/ana", + "env": { + "DFO_CREDENTIALS_FILE": "", + "XDG_CONFIG_HOME": "" + }, + "path": "/home/ana/.config/dfo/credentials.toml" + }, + { + "name": "appdata-on-windows", + "platform": "windows", + "home": "C:\\Users\\ana", + "env": { + "APPDATA": "C:\\Users\\ana\\AppData\\Roaming" + }, + "path": "C:\\Users\\ana\\AppData\\Roaming\\dfo\\credentials.toml" + }, + { + "name": "windows-ignores-xdg", + "platform": "windows", + "home": "C:\\Users\\ana", + "env": { + "APPDATA": "C:\\Users\\ana\\AppData\\Roaming", + "XDG_CONFIG_HOME": "C:\\xdg" + }, + "path": "C:\\Users\\ana\\AppData\\Roaming\\dfo\\credentials.toml" + }, + { + "name": "windows-without-appdata", + "platform": "windows", + "home": "C:\\Users\\ana", + "env": {}, + "path": "C:\\Users\\ana\\AppData\\Roaming\\dfo\\credentials.toml" + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/rules/key-format.json b/python/client-contract/src/dfo_client_contract/rules/key-format.json new file mode 100644 index 0000000..a2a793a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/key-format.json @@ -0,0 +1,62 @@ +{ + "format_version": 1, + "rule": "key-format", + "vectors": [ + { + "name": "secret-key-passes", + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe", + "verdict": "pass" + }, + { + "name": "publishable-key-passes", + "key": "dfo_p_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc", + "verdict": "pass" + }, + { + "name": "checksum-with-leading-zero-passes", + "key": "dfo_k_padTest00000000000000000000000020xpmWN", + "verdict": "pass" + }, + { + "name": "longer-body-passes", + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0UeXY2EMnsV", + "verdict": "pass" + }, + { + "name": "unknown-prefix-warns", + "key": "dfo_x_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe", + "verdict": "warn", + "reason": "unknown_prefix" + }, + { + "name": "other-vendor-key-warns", + "key": "sk-4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue", + "verdict": "warn", + "reason": "unknown_prefix" + }, + { + "name": "non-base62-character-warns", + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0U-2wanxe", + "verdict": "warn", + "reason": "not_base62" + }, + { + "name": "checksum-mismatch-warns", + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue448bfc", + "verdict": "warn", + "reason": "checksum_mismatch" + }, + { + "name": "swapped-body-characters-warn", + "key": "dfo_k_f48Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe", + "verdict": "warn", + "reason": "checksum_mismatch" + }, + { + "name": "too-short-for-a-checksum-warns", + "key": "dfo_k_abc123", + "verdict": "warn", + "reason": "checksum_mismatch" + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/rules/key-lookup.json b/python/client-contract/src/dfo_client_contract/rules/key-lookup.json new file mode 100644 index 0000000..2b8d1e5 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/key-lookup.json @@ -0,0 +1,129 @@ +{ + "format_version": 1, + "rule": "key-lookup", + "vectors": [ + { + "name": "argument-wins", + "api_key": "dfo_k_argument", + "env": { + "DFO_API_KEY": "dfo_k_environment" + }, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "source": "argument", + "key": "dfo_k_argument" + }, + { + "name": "false-forces-anonymous", + "api_key": false, + "env": { + "DFO_API_KEY": "dfo_k_environment" + }, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "source": "anonymous", + "key": null + }, + { + "name": "environment-beats-file", + "env": { + "DFO_API_KEY": "dfo_k_environment" + }, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "source": "environment", + "key": "dfo_k_environment" + }, + { + "name": "default-profile", + "env": {}, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "source": "credentials_file", + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe" + }, + { + "name": "named-profile", + "env": { + "DFO_PROFILE": "ci" + }, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "source": "credentials_file", + "key": "dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc" + }, + { + "name": "empty-environment-counts-as-unset", + "env": { + "DFO_API_KEY": "", + "DFO_PROFILE": "" + }, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "source": "credentials_file", + "key": "dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe" + }, + { + "name": "no-file-is-anonymous", + "env": {}, + "file": null, + "source": "anonymous", + "key": null + }, + { + "name": "default-profile-absent-is-anonymous", + "env": {}, + "file": "[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "source": "anonymous", + "key": null + }, + { + "name": "named-profile-absent-raises", + "env": { + "DFO_PROFILE": "prod" + }, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n\n[ci]\nkey = \"dfo_k_Zz9Yy8Xx7Ww6Vv5Uu4Tt3Ss2Rr1Qq0Pp448bfc\"\n", + "error": { + "reason": "profile_not_found" + } + }, + { + "name": "profile-without-key-raises", + "env": {}, + "file": "[default]\nlabel = \"laptop\"\n", + "error": { + "reason": "profile_without_key" + } + }, + { + "name": "invalid-file-raises", + "env": {}, + "file": "key = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n", + "error": { + "reason": "credentials_file_invalid" + } + }, + { + "name": "invalid-file-is-not-read-when-the-environment-wins", + "env": { + "DFO_API_KEY": "dfo_k_environment" + }, + "file": "key = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n", + "source": "environment", + "key": "dfo_k_environment" + }, + { + "name": "empty-argument-raises", + "api_key": "", + "env": { + "DFO_API_KEY": "dfo_k_environment" + }, + "file": "[default]\nkey = \"dfo_k_4f8Kq2ZtR7mWx1NcB9vLp3YhD6sGa0Ue2wanxe\"\n", + "error": { + "reason": "key_empty" + } + }, + { + "name": "empty-profile-key-raises", + "env": {}, + "file": "[default]\nkey = \"\"\n", + "error": { + "reason": "profile_without_key" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/rules/rules.schema.json b/python/client-contract/src/dfo_client_contract/rules/rules.schema.json new file mode 100644 index 0000000..9a33072 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/rules/rules.schema.json @@ -0,0 +1,519 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/rules/rules.schema.json", + "title": "Client rule vectors", + "description": "One file per rule, each holding the vectors a client's implementation of that rule must reproduce. rules/README.md states each rule.", + "type": "object", + "oneOf": [ + { + "$ref": "#/$defs/key_format" + }, + { + "$ref": "#/$defs/credentials_path" + }, + { + "$ref": "#/$defs/credentials_file" + }, + { + "$ref": "#/$defs/key_lookup" + }, + { + "$ref": "#/$defs/cache_dir" + }, + { + "$ref": "#/$defs/cache_layout" + } + ], + "$defs": { + "one_line": { + "description": "Text without a newline. Python's `re.search` lets an anchored pattern's `$` match before a final newline, so every pattern here anchored with `$` refers to this as well.", + "not": { + "pattern": "\\n" + } + }, + "name": { + "type": "string", + "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$", + "$ref": "#/$defs/one_line" + }, + "platform": { + "enum": [ + "linux", + "macos", + "windows" + ] + }, + "env": { + "description": "The environment variables set for the vector. A variable not listed is unset.", + "type": "object", + "propertyNames": { + "pattern": "^[A-Z][A-Z0-9_]*$", + "$ref": "#/$defs/one_line" + }, + "additionalProperties": { + "type": "string" + } + }, + "path": { + "type": "string", + "minLength": 1 + }, + "rendering": { + "type": "object", + "additionalProperties": false, + "required": [ + "format", + "bundle" + ], + "properties": { + "format": { + "enum": [ + "csv", + "xlsx", + "parquet" + ] + }, + "bundle": { + "type": "boolean" + }, + "layout": { + "const": "frame" + } + } + }, + "file_error": { + "enum": [ + "outside_table", + "duplicate_table", + "duplicate_key", + "invalid_line" + ] + }, + "suite": { + "type": "object", + "required": [ + "format_version", + "rule", + "vectors" + ], + "properties": { + "format_version": { + "const": 1 + }, + "vectors": { + "type": "array", + "minItems": 1 + } + } + }, + "key_format": { + "$ref": "#/$defs/suite", + "additionalProperties": false, + "properties": { + "format_version": true, + "rule": { + "const": "key-format" + }, + "vectors": { + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "key", + "verdict" + ], + "properties": { + "name": { + "$ref": "#/$defs/name" + }, + "key": { + "type": "string", + "minLength": 1 + }, + "verdict": { + "enum": [ + "pass", + "warn" + ] + }, + "reason": { + "enum": [ + "unknown_prefix", + "not_base62", + "checksum_mismatch" + ] + } + }, + "if": { + "properties": { + "verdict": { + "const": "warn" + } + } + }, + "then": { + "required": [ + "reason" + ] + }, + "else": { + "not": { + "required": [ + "reason" + ] + } + } + } + } + } + }, + "credentials_path": { + "$ref": "#/$defs/suite", + "additionalProperties": false, + "properties": { + "format_version": true, + "rule": { + "const": "credentials-path" + }, + "vectors": { + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "platform", + "home", + "env", + "path" + ], + "properties": { + "name": { + "$ref": "#/$defs/name" + }, + "platform": { + "$ref": "#/$defs/platform" + }, + "home": { + "$ref": "#/$defs/path" + }, + "env": { + "$ref": "#/$defs/env" + }, + "path": { + "$ref": "#/$defs/path" + } + } + } + } + } + }, + "credentials_file": { + "$ref": "#/$defs/suite", + "additionalProperties": false, + "properties": { + "format_version": true, + "rule": { + "const": "credentials-file" + }, + "vectors": { + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "text" + ], + "oneOf": [ + { + "required": [ + "profiles" + ] + }, + { + "required": [ + "error" + ] + } + ], + "properties": { + "name": { + "$ref": "#/$defs/name" + }, + "text": { + "type": "string" + }, + "profiles": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "error": { + "type": "object", + "additionalProperties": false, + "required": [ + "reason", + "line" + ], + "properties": { + "reason": { + "$ref": "#/$defs/file_error" + }, + "line": { + "type": "integer", + "minimum": 1 + } + } + } + } + } + } + } + }, + "key_lookup": { + "$ref": "#/$defs/suite", + "additionalProperties": false, + "properties": { + "format_version": true, + "rule": { + "const": "key-lookup" + }, + "vectors": { + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "env", + "file" + ], + "oneOf": [ + { + "required": [ + "source", + "key" + ] + }, + { + "required": [ + "error" + ] + } + ], + "properties": { + "name": { + "$ref": "#/$defs/name" + }, + "api_key": { + "description": "The api_key argument: a key string, the empty string a client refuses, or false to force anonymous use. Absent when the caller passes none.", + "oneOf": [ + { + "type": "string" + }, + { + "const": false + } + ] + }, + "env": { + "$ref": "#/$defs/env" + }, + "file": { + "description": "The text of the credentials file at the credentials path, or null when no file exists there.", + "type": [ + "string", + "null" + ] + }, + "source": { + "enum": [ + "argument", + "environment", + "credentials_file", + "anonymous" + ] + }, + "key": { + "type": [ + "string", + "null" + ] + }, + "error": { + "type": "object", + "additionalProperties": false, + "required": [ + "reason" + ], + "properties": { + "reason": { + "enum": [ + "key_empty", + "profile_not_found", + "profile_without_key", + "credentials_file_invalid" + ] + } + } + } + } + } + } + } + }, + "cache_dir": { + "$ref": "#/$defs/suite", + "additionalProperties": false, + "properties": { + "format_version": true, + "rule": { + "const": "cache-dir" + }, + "vectors": { + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "platform", + "home", + "env", + "root", + "directory" + ], + "properties": { + "name": { + "$ref": "#/$defs/name" + }, + "platform": { + "$ref": "#/$defs/platform" + }, + "home": { + "$ref": "#/$defs/path" + }, + "cache_dir": { + "$ref": "#/$defs/path" + }, + "env": { + "$ref": "#/$defs/env" + }, + "root": { + "$ref": "#/$defs/path" + }, + "directory": { + "$ref": "#/$defs/path" + } + } + } + } + } + }, + "cache_layout": { + "$ref": "#/$defs/suite", + "additionalProperties": false, + "properties": { + "format_version": true, + "rule": { + "const": "cache-layout" + }, + "vectors": { + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "entry", + "path" + ], + "oneOf": [ + { + "properties": { + "entry": { + "const": "file" + } + }, + "required": [ + "digest" + ], + "not": { + "anyOf": [ + { + "required": [ + "spec_id" + ] + }, + { + "required": [ + "content_version" + ] + }, + { + "required": [ + "rendering" + ] + } + ] + } + }, + { + "properties": { + "entry": { + "const": "manifest" + } + }, + "required": [ + "spec_id", + "content_version", + "rendering" + ], + "not": { + "required": [ + "digest" + ] + } + } + ], + "properties": { + "name": { + "$ref": "#/$defs/name" + }, + "entry": { + "enum": [ + "file", + "manifest" + ] + }, + "digest": { + "type": "string", + "pattern": "^sha256:[0-9a-f]{64}$", + "$ref": "#/$defs/one_line" + }, + "spec_id": { + "type": "string", + "pattern": "^spec_[0-9a-f]{32}$", + "$ref": "#/$defs/one_line" + }, + "content_version": { + "type": "string", + "pattern": "^cv_[0-9a-f]{32}$", + "$ref": "#/$defs/one_line" + }, + "rendering": { + "$ref": "#/$defs/rendering" + }, + "path": { + "type": "string", + "pattern": "^[a-z]+(/[A-Za-z0-9_.-]+)+$", + "$ref": "#/$defs/one_line" + } + } + } + } + } + } + } +} diff --git a/python/client-contract/src/dfo_client_contract/scenario.schema.json b/python/client-contract/src/dfo_client_contract/scenario.schema.json new file mode 100644 index 0000000..d1c6481 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenario.schema.json @@ -0,0 +1,1020 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/scenario.schema.json", + "title": "Client scenario", + "description": "One client-level call, the HTTP exchanges it makes in order, and the outcome each step reaches. Every DFO client replays every scenario.", + "type": "object", + "additionalProperties": false, + "required": [ + "format_version", + "name", + "description", + "origin", + "call", + "exchanges", + "expect" + ], + "properties": { + "format_version": { + "const": 1 + }, + "name": { + "$ref": "#/$defs/name" + }, + "description": { + "type": "string", + "minLength": 1 + }, + "origin": { + "oneOf": [ + { + "$ref": "#/$defs/recorded" + }, + { + "$ref": "#/$defs/synthetic" + } + ] + }, + "call": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/step" + } + }, + "exchanges": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/exchange" + } + }, + "expect": { + "description": "One outcome per step of call, in the same order.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/outcome" + } + } + }, + "$defs": { + "one_line": { + "description": "Text without a newline. Python's `re.search` lets an anchored pattern's `$` match before a final newline, so every pattern here anchored with `$` refers to this as well.", + "not": { + "pattern": "\\n" + } + }, + "name": { + "type": "string", + "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$", + "$ref": "#/$defs/one_line" + }, + "spec_id": { + "type": "string", + "pattern": "^spec_[0-9a-f]{32}$", + "$ref": "#/$defs/one_line" + }, + "content_version": { + "type": "string", + "pattern": "^cv_[0-9a-f]{32}$", + "$ref": "#/$defs/one_line" + }, + "operation_id": { + "type": "string", + "pattern": "^op_[0-9a-f]{64}$", + "$ref": "#/$defs/one_line" + }, + "recorded": { + "type": "object", + "additionalProperties": false, + "required": [ + "kind", + "base_url", + "dfo_commit", + "recorded_at" + ], + "properties": { + "kind": { + "const": "recorded" + }, + "base_url": { + "description": "The base URL the client was given. A request path resolves against it, and an origin path against its origin.", + "type": "string", + "pattern": "^https?://[^/?#]+(/[^?#]*)?$", + "$ref": "#/$defs/one_line" + }, + "dfo_commit": { + "type": "string", + "pattern": "^[0-9a-f]{40}$", + "$ref": "#/$defs/one_line" + }, + "recorded_at": { + "type": "string", + "format": "date-time" + } + } + }, + "synthetic": { + "type": "object", + "additionalProperties": false, + "required": [ + "kind", + "derived_from", + "edit" + ], + "properties": { + "kind": { + "const": "synthetic" + }, + "derived_from": { + "$ref": "#/$defs/name" + }, + "edit": { + "type": "string", + "minLength": 1, + "$ref": "#/$defs/one_line" + } + } + }, + "spec": { + "description": "A Spec as a client holds it: the server's spec_id and unmodified definition, the sentence when the client knows it, and the entity groups the server's resolved.entity_groups names, when it names any.", + "type": "object", + "additionalProperties": false, + "required": [ + "spec_id", + "definition" + ], + "properties": { + "spec_id": { + "$ref": "#/$defs/spec_id" + }, + "definition": { + "type": "object" + }, + "sentence": { + "type": "string", + "minLength": 1 + }, + "entity_groups": { + "description": "The server's resolved.entity_groups: each grouped role's EntityGroup, keyed by role.", + "type": "object", + "minProperties": 1, + "additionalProperties": { + "type": "object" + } + } + } + }, + "window": { + "oneOf": [ + { + "enum": [ + "all", + "latest" + ] + }, + { + "type": "array", + "prefixItems": [ + { + "type": "integer" + }, + { + "type": "integer" + } + ], + "minItems": 2, + "maxItems": 2 + } + ] + }, + "narrowing": { + "type": "object", + "properties": { + "window": { + "$ref": "#/$defs/window" + }, + "entities": { + "description": "The roles the caller rebinds. A role holds its new refs, or null to drop it; a role left out keeps the spec's binding.", + "type": "object", + "additionalProperties": { + "type": [ + "array", + "null" + ], + "minItems": 1, + "items": { + "type": "string", + "minLength": 1 + } + } + }, + "facets": { + "type": "object" + } + } + }, + "layout": { + "enum": [ + "long", + "frame" + ] + }, + "step": { + "oneOf": [ + { + "$ref": "#/$defs/search_step" + }, + { + "$ref": "#/$defs/choose_step" + }, + { + "$ref": "#/$defs/fetch_answer_step" + }, + { + "$ref": "#/$defs/fetch_spec_step" + }, + { + "$ref": "#/$defs/fetch_ref_step" + }, + { + "$ref": "#/$defs/newest_version_step" + }, + { + "$ref": "#/$defs/mint_step" + }, + { + "$ref": "#/$defs/operation_step" + }, + { + "$ref": "#/$defs/result_step" + } + ] + }, + "search_step": { + "type": "object", + "additionalProperties": false, + "required": [ + "op", + "question" + ], + "properties": { + "op": { + "const": "search" + }, + "question": { + "type": "string", + "minLength": 1 + } + } + }, + "choose_step": { + "description": "A choice on the answer the previous step produced. part names the part by index, by variable text, or by a word that one part's options mention, and may be left out when one part awaits a choice. option names the option by index or label; a candidate is named by index.", + "type": "object", + "additionalProperties": false, + "required": [ + "op", + "option" + ], + "properties": { + "op": { + "const": "choose" + }, + "part": { + "oneOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "string", + "minLength": 1 + } + ] + }, + "option": { + "oneOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "string", + "minLength": 1 + } + ] + } + } + }, + "fetch_answer_step": { + "description": "A fetch of the answer the last search or choose step produced.", + "type": "object", + "additionalProperties": false, + "required": [ + "op" + ], + "properties": { + "op": { + "const": "fetch" + }, + "layout": { + "$ref": "#/$defs/layout" + }, + "partial": { + "type": "boolean" + }, + "strict": { + "type": "boolean" + } + } + }, + "fetch_spec_step": { + "type": "object", + "additionalProperties": false, + "required": [ + "op", + "spec" + ], + "$ref": "#/$defs/narrowing", + "properties": { + "op": { + "const": "fetch" + }, + "spec": { + "$ref": "#/$defs/spec" + }, + "layout": { + "$ref": "#/$defs/layout" + }, + "strict": { + "type": "boolean" + }, + "window": true, + "entities": true, + "facets": true + } + }, + "fetch_ref_step": { + "description": "A fetch of the exact versions a ref names. A ref takes no narrowing.", + "type": "object", + "additionalProperties": false, + "required": [ + "op", + "ref" + ], + "properties": { + "op": { + "const": "fetch" + }, + "ref": { + "$ref": "dataset-ref.schema.json" + } + } + }, + "newest_version_step": { + "description": "The newest stored version of a spec, the one the versions route lists first.", + "type": "object", + "additionalProperties": false, + "required": [ + "op", + "spec" + ], + "properties": { + "op": { + "const": "newest_version" + }, + "spec": { + "$ref": "#/$defs/spec" + } + } + }, + "mint_step": { + "description": "A mint of a spec, which starts its build and answers the operation; it takes a layout and no narrowing.", + "type": "object", + "additionalProperties": false, + "required": [ + "op", + "spec" + ], + "properties": { + "op": { + "const": "mint" + }, + "spec": { + "$ref": "#/$defs/spec" + }, + "layout": { + "$ref": "#/$defs/layout" + } + } + }, + "operation_step": { + "description": "Resuming, by its id, a long build another process started.", + "type": "object", + "additionalProperties": false, + "required": [ + "op", + "operation_id" + ], + "properties": { + "op": { + "const": "operation" + }, + "operation_id": { + "$ref": "#/$defs/operation_id" + }, + "layout": { + "$ref": "#/$defs/layout" + } + } + }, + "result_step": { + "description": "Waiting for the operation the previous mint or operation step holds, and taking its dataset.", + "type": "object", + "additionalProperties": false, + "required": [ + "op" + ], + "properties": { + "op": { + "const": "result" + } + } + }, + "exchange": { + "type": "object", + "additionalProperties": false, + "required": [ + "request", + "response" + ], + "properties": { + "request": { + "$ref": "#/$defs/request" + }, + "response": { + "$ref": "#/$defs/response" + } + } + }, + "request": { + "description": "Exactly one of path, a path the client composes under the base URL; origin_path, a root-relative URL the server returned, resolved against the base URL's origin; or url, an absolute URL outside the API, such as a signed storage URL. A POST names its body in json.", + "type": "object", + "additionalProperties": false, + "required": [ + "method" + ], + "oneOf": [ + { + "required": [ + "path" + ] + }, + { + "required": [ + "origin_path" + ] + }, + { + "required": [ + "url" + ] + } + ], + "if": { + "properties": { + "method": { + "const": "POST" + } + } + }, + "then": { + "required": [ + "json" + ] + }, + "properties": { + "method": { + "enum": [ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE" + ] + }, + "path": { + "type": "string", + "pattern": "^/[^?#]*(\\?[^#]*)?$", + "$ref": "#/$defs/one_line" + }, + "origin_path": { + "type": "string", + "pattern": "^/[^?#]*(\\?[^#]*)?$", + "$ref": "#/$defs/one_line" + }, + "url": { + "type": "string", + "pattern": "^https?://[^/?#]+", + "$ref": "#/$defs/one_line" + }, + "json": { + "description": "The members of the JSON request body that must match, compared as parsed JSON values. A recorded scenario lists every member the client sent.", + "type": "object" + } + } + }, + "response": { + "type": "object", + "additionalProperties": false, + "required": [ + "status" + ], + "not": { + "required": [ + "json", + "body_file" + ] + }, + "properties": { + "status": { + "type": "integer", + "minimum": 100, + "maximum": 599 + }, + "headers": { + "description": "The response headers a client reads, by lower-case name, and a cache-control header that marks the response shared-cacheable, which excuses it from carrying x-dfo-trace-id.", + "type": "object", + "propertyNames": { + "pattern": "^[a-z0-9-]+$", + "$ref": "#/$defs/one_line" + }, + "additionalProperties": { + "type": "string" + } + }, + "json": { + "description": "The JSON response body." + }, + "body_file": { + "description": "A binary response body, in a file beside the record whose name starts with the scenario's name.", + "type": "string", + "pattern": "^[a-z0-9]+(-[a-z0-9]+)*\\.[a-z0-9]+$", + "$ref": "#/$defs/one_line" + } + } + }, + "gap_kind": { + "enum": [ + "choice", + "no_data", + "not_understood", + "unsupported", + "timed_out", + "unknown" + ] + }, + "outcome": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "answer" + ], + "properties": { + "answer": { + "$ref": "#/$defs/answer" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "dataset" + ], + "properties": { + "dataset": { + "$ref": "#/$defs/dataset" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "operation" + ], + "properties": { + "operation": { + "$ref": "#/$defs/operation" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "newest_version" + ], + "properties": { + "newest_version": { + "$ref": "#/$defs/newest_version" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/$defs/error" + } + } + } + ] + }, + "answer": { + "type": "object", + "additionalProperties": false, + "required": [ + "kind", + "complete", + "gaps" + ], + "properties": { + "kind": { + "enum": [ + "resolution", + "catalogue", + "declined" + ] + }, + "status": { + "type": "string", + "minLength": 1 + }, + "sentence": { + "type": [ + "string", + "null" + ] + }, + "complete": { + "type": "boolean" + }, + "specs": { + "description": "The distinct spec_ids of the answer's definite parts, in part order.", + "type": "array", + "items": { + "$ref": "#/$defs/spec_id" + } + }, + "gaps": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "part", + "kind", + "options" + ], + "properties": { + "part": { + "type": "integer", + "minimum": 0 + }, + "kind": { + "$ref": "#/$defs/gap_kind" + }, + "options": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "retry_waits": { + "$ref": "#/$defs/retry_waits" + }, + "warnings": { + "$ref": "#/$defs/warnings" + } + } + }, + "dataset": { + "type": "object", + "additionalProperties": false, + "required": [ + "rows", + "columns", + "complete", + "members", + "missing" + ], + "properties": { + "rows": { + "type": "integer", + "minimum": 0 + }, + "columns": { + "type": "array", + "items": { + "type": "string", + "minLength": 1 + } + }, + "part_rows": { + "description": "For a dataset of several members only: one entry per member, in member order, with the value of the part column on that member's rows and the number of those rows.", + "type": "array", + "minItems": 2, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "part", + "rows" + ], + "properties": { + "part": { + "type": "string", + "minLength": 1 + }, + "rows": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "complete": { + "type": "boolean" + }, + "members": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "parts", + "spec_id", + "content_version", + "sentence" + ], + "properties": { + "parts": { + "type": "array", + "items": { + "type": "string", + "minLength": 1 + } + }, + "spec_id": { + "$ref": "#/$defs/spec_id" + }, + "content_version": { + "$ref": "#/$defs/content_version" + }, + "sentence": { + "type": "string", + "minLength": 1 + } + } + } + }, + "missing": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "part", + "kind" + ], + "properties": { + "part": { + "type": "integer", + "minimum": 0 + }, + "kind": { + "$ref": "#/$defs/gap_kind" + } + } + } + }, + "search_warning": { + "description": "For a fetch of an answer only: whether the fetch issued a SearchWarning.", + "type": "boolean" + }, + "long_builds": { + "$ref": "#/$defs/long_builds" + }, + "retry_waits": { + "$ref": "#/$defs/retry_waits" + }, + "warnings": { + "$ref": "#/$defs/warnings" + } + } + }, + "operation": { + "type": "object", + "additionalProperties": false, + "required": [ + "operation_id", + "status" + ], + "properties": { + "operation_id": { + "$ref": "#/$defs/operation_id" + }, + "status": { + "enum": [ + "pending", + "running", + "done", + "failed" + ] + }, + "retry_waits": { + "$ref": "#/$defs/retry_waits" + }, + "warnings": { + "$ref": "#/$defs/warnings" + } + } + }, + "newest_version": { + "description": "The newest stored version a newest_version step finds, or null when the spec has none.", + "type": "object", + "additionalProperties": false, + "required": [ + "content_version" + ], + "properties": { + "content_version": { + "oneOf": [ + { + "$ref": "#/$defs/content_version" + }, + { + "type": "null" + } + ] + }, + "retry_waits": { + "$ref": "#/$defs/retry_waits" + }, + "warnings": { + "$ref": "#/$defs/warnings" + } + } + }, + "error": { + "type": "object", + "additionalProperties": false, + "required": [ + "class", + "code", + "trace_id" + ], + "properties": { + "class": { + "enum": [ + "InvalidRequestError", + "NotFoundError", + "IncompleteAnswerError", + "DeclinedError", + "VersionUnavailableError", + "AuthenticationError", + "PermissionDeniedError", + "RateLimitError", + "QuotaExceededError", + "ServerError", + "ContractError", + "SearchWarning", + "DataWarning", + "NetworkError", + "DfoTimeoutError" + ] + }, + "code": { + "description": "A refusal's code: the problem document's code, the website proxy's error member, or refusal_without_code for a body with neither. A SearchWarning's code is the server's warning or departure code, or the verb of an operation Search did not run, or null when the readings differ from the question in several ways. A DataWarning's code is the manifest warning's. Any other error the client raises itself carries its code from client-codes.json.", + "type": [ + "string", + "null" + ] + }, + "trace_id": { + "description": "A refusal's trace id: its body's trace_id, else its x-dfo-trace-id header, else null. A failed operation's is its error document's, else the header of the response that carried the failed resource; a VersionUnavailableError's is its first refusal's. An error the client raises itself that describes a response, an unexpected_response, a contract_violation, an answer_declined, an answer_incomplete, a SearchWarning or a DataWarning, carries that response's trace id, the held answer's Search response for those that describe the answer, as the body's trace_id, else the x-dfo-trace-id header, else null. An error that describes the caller's input, or a storage-host fetch, carries null.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "newest_version": { + "description": "For a VersionUnavailableError only: the newest version the lookup found, or null.", + "oneOf": [ + { + "$ref": "#/$defs/content_version" + }, + { + "type": "null" + } + ] + }, + "long_builds": { + "$ref": "#/$defs/long_builds" + }, + "retry_waits": { + "$ref": "#/$defs/retry_waits" + }, + "warnings": { + "$ref": "#/$defs/warnings" + } + }, + "if": { + "properties": { + "class": { + "const": "VersionUnavailableError" + } + } + }, + "then": { + "required": [ + "newest_version" + ] + }, + "else": { + "not": { + "required": [ + "newest_version" + ] + } + } + }, + "long_builds": { + "description": "One entry per build the step saw the server run on, in order.", + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "operation_id", + "poll_waits", + "resubmissions" + ], + "properties": { + "operation_id": { + "description": "The operation the client polled last, the one a deadline error names.", + "$ref": "#/$defs/operation_id" + }, + "poll_waits": { + "description": "The seconds the client waited before each poll, in order.", + "type": "array", + "items": { + "type": "number", + "minimum": 0 + } + }, + "resubmissions": { + "description": "How many times the client posted the build again after the operation failed.", + "type": "integer", + "minimum": 0 + } + } + } + }, + "retry_waits": { + "description": "The seconds a step waited before each retry of a refused request, in order: the refusal's Retry-After, else a backoff that doubles from 0.5 to 8 seconds. Given only when the step retried.", + "type": "array", + "minItems": 1, + "items": { + "type": "number", + "minimum": 0 + } + }, + "warnings": { + "description": "The codes, from warning-codes.json and in order, of the warnings the step's API responses issued. Given only when they issued any.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/name_code" + } + }, + "name_code": { + "type": "string", + "pattern": "^[a-z][a-z0-9]*(_[a-z0-9]+)*$", + "$ref": "#/$defs/one_line" + } + } +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-candidate-specs-not-a-list.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidate-specs-not-a-list.json new file mode 100644 index 0000000..c8d1bb2 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidate-specs-not-a-list.json @@ -0,0 +1,2373 @@ +{ + "format_version": 1, + "name": "answer-candidate-specs-not-a-list", + "description": "A strict member of a JSON type its schema does not admit raises ContractError contract_violation at its pointer, /parts/0/candidates/specs, as a missing one does.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-candidates-choose-fetch", + "edit": "Part 0's candidates.specs becomes an object keyed by index, and the choice and fetch go." + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d107dd88e50147378d54464bcdaf9695" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022", + "normalized_query": "GNI of Germany from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d107dd88e50147378d54464bcdaf9695", + "warnings": [], + "timing_ms": { + "total": 4075, + "by_step": { + "coverage": 0, + "extract": 1004 + } + }, + "llm_usage": { + "input_tokens": 7300, + "output_tokens": 300, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2799, + "by_step": { + "recall": 381, + "shape_arcs": 2, + "shape_probe_coverage": 1, + "shape_probe": 203, + "shape_groups": 18, + "shape_labels": 5, + "shape_admission": 0, + "shape": 1186, + "bind": 829, + "materialise": 217, + "answer": 186 + } + }, + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": { + "0": { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + "1": { + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "definition": { + "schema_version": 1, + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + "2": { + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "definition": { + "schema_version": 1, + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity per capita in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + }, + "truncated": false + }, + "reading_assumptions": { + "spec_c0f61f3ca3558aac184973441a67601e": [], + "spec_403a96317ee8b97f1d8569c71015e5ce": [], + "spec_d94656e5d53b7b6c6b0c683145a1cd98": [] + } + } + ], + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "candidates" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "d107dd88e50147378d54464bcdaf9695" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.json new file mode 100644 index 0000000..433d123 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.json @@ -0,0 +1,3628 @@ +{ + "format_version": 1, + "name": "answer-candidates-choose-fetch", + "description": "A question with three readings answers one candidates part, a choice gap with three options. Choosing option 0 posts that candidate's identity to Search as the one dataset_resubmit identity entry, echoing the part's reading_assumptions under its spec_id as assumptions. Search answers that reading definite with its own sentence, and fetching the answer builds that candidate's spec.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:06Z" + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022" + }, + { + "op": "choose", + "option": 0 + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d107dd88e50147378d54464bcdaf9695" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022", + "normalized_query": "GNI of Germany from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d107dd88e50147378d54464bcdaf9695", + "warnings": [], + "timing_ms": { + "total": 4075, + "by_step": { + "coverage": 0, + "extract": 1004 + } + }, + "llm_usage": { + "input_tokens": 7300, + "output_tokens": 300, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2799, + "by_step": { + "recall": 381, + "shape_arcs": 2, + "shape_probe_coverage": 1, + "shape_probe": 203, + "shape_groups": 18, + "shape_labels": 5, + "shape_admission": 0, + "shape": 1186, + "bind": 829, + "materialise": 217, + "answer": 186 + } + }, + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "definition": { + "schema_version": 1, + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "definition": { + "schema_version": 1, + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity per capita in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_c0f61f3ca3558aac184973441a67601e": [], + "spec_403a96317ee8b97f1d8569c71015e5ce": [], + "spec_d94656e5d53b7b6c6b0c683145a1cd98": [] + } + } + ], + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "candidates" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [], + "variable_text": "GNI" + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4386e87708a64f078f39a795faeb0100" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4386e87708a64f078f39a795faeb0100", + "warnings": [], + "timing_ms": { + "total": 9, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 8, + "by_step": { + "validate": 0, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 1, + "materialise": 0, + "answer": 1, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1b25ce6b48064cf199e5d3f405c4275a" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "GrossOfFixedCapitalConsumption", + "state": "value" + }, + "property": "fixedCapitalConsumptionBasis" + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2022, + "start_year": 2015 + } + } + }, + "content_version": "cv_3cae36487750f272df16f77858171e89", + "prepared_at": "2026-10-21T13:05:11Z", + "coverage": { + "rows": 8, + "dimensions": [ + { + "label": "observationAbout", + "count": 1 + }, + { + "label": "years", + "count": 8 + } + ], + "window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022, + "origin": "query" + } + }, + "citation": { + "text": "OECD DAC1 (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?fs[0]=Topic,0%7CDevelopment%23DEV%23&fs[1]=Topic,1%7CDevelopment%23DEV%23%7COfficial%20Development%20Assistance%20%28ODA%29%23DEV_ODA%23&pg=0&fc=Topic&snb=23&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC1%40DF_DAC1&df[ag]=OECD.DCD.FSD&df[vs]=1.7&dq=._Z.....&pd=,&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC1 is the OECD Development Assistance Committee's table of total flows by provider. It reports each donor's ODA, other official flows, export credits and private flows by aid type, with no recipient or sector breakdown. It is the official source for headline ODA, the bilateral and multilateral split, in-donor costs such as refugees in donor countries, and the ODA/GNI ratio.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC1/Table1_Data.zip", + "attribution": "OECD (2026), OECD DAC1, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC1/Table1_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-12", + "years_covered": "1960-2025", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC1 in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Standardise providers", + "description": "Provider codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC1 reports for groups of providers, such as all DAC countries, the G7 and the EU members of the DAC, are kept as providers of their own." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars or providers' own currencies. Amounts received are left out, though net disbursements, which subtract them, are kept. Where DAC1 reports a grant equivalent under two types of aid, the fuller of the two is used, and total flows as a share of GNI in grant equivalents are left out, since they repeat ODA as a share of GNI." + }, + { + "transformation": "Convert to whole units", + "description": "DAC1 reports amounts, GNI and population in millions, which are converted to whole units." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year and the provider. Flows are broken down by type of aid as DAC1 reports it, and by gross or net disbursements, commitments or grant equivalents, split into grants and non-grants where DAC1 splits them. Shares record that they are a share of the provider's GNI. GNI and population are reported about the provider." + } + ], + "version_history": [ + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Total flows by provider and aid type, including ODA, other official flows and private flows, and ODA as a share of GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022, + "origin": "query" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDDAC1", + "revision": "2026-10-12" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:PrimaryIncome_EconomicUnit_GrossOfFixedCapitalConsumption_Nominal", + "roles": [ + "observationAbout" + ], + "observation_count": 8 + } + ], + "family_member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "family_member_count": 1, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDDAC1", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "8223167158242641624" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "8223167158242641624" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "8223167158242641624" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:11.583868+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:9086e741fcbfa1fe56a9d8af57c54ae3784744b50a03086d9e715623d9c71766", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 4800, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:11.551892+00:00", + "tier": "working", + "url": "/api/datasets/spec_c0f61f3ca3558aac184973441a67601e/cv_3cae36487750f272df16f77858171e89/files/sha256:9086e741fcbfa1fe56a9d8af57c54ae3784744b50a03086d9e715623d9c71766" + }, + { + "artifact_digest": "sha256:d822d05c709d2d1ca448023a433f936b28403893dede278e2b2696eca3587d1c", + "rendering": { + "statistics": "series" + }, + "bytes": 5294, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:11.551892+00:00", + "tier": "working", + "url": "/api/datasets/spec_c0f61f3ca3558aac184973441a67601e/cv_3cae36487750f272df16f77858171e89/files/sha256:d822d05c709d2d1ca448023a433f936b28403893dede278e2b2696eca3587d1c" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "observationAbout", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 8 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "observationAbout", + "field": "iso3", + "token": "observationAbout_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "iso2", + "token": "observationAbout_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "label", + "token": "observationAbout_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "type", + "token": "observationAbout_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "observationAbout_label" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:11.551738Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_c0f61f3ca3558aac184973441a67601e/cv_3cae36487750f272df16f77858171e89/files/sha256:9086e741fcbfa1fe56a9d8af57c54ae3784744b50a03086d9e715623d9c71766" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A9086e741fcbfa1fe56a9d8af57c54ae3784744b50a03086d9e715623d9c71766?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0abf22ccda6d4496896abfc9dbacd47b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A9086e741fcbfa1fe56a9d8af57c54ae3784744b50a03086d9e715623d9c71766?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "90ff16f5dd7746d3842158d1e5ae0635" + }, + "body_file": "answer-candidates-choose-fetch.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "candidates", + "sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "complete": true, + "specs": [ + "spec_c0f61f3ca3558aac184973441a67601e" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 8, + "columns": [ + "stat_var", + "stat_var_label", + "observationAbout", + "observationAbout_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "GNI" + ], + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "content_version": "cv_3cae36487750f272df16f77858171e89", + "sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1." + } + ], + "missing": [], + "search_warning": false + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.parquet b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.parquet new file mode 100644 index 0000000..4b92f5b Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/answer-candidates-choose-fetch.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json new file mode 100644 index 0000000..ec4b825 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json @@ -0,0 +1,89 @@ +{ + "format_version": 1, + "name": "answer-catalogue", + "description": "A question about what data exists answers catalogue, with no parts and no sentence, and is not complete. Fetching it raises DeclinedError with no request.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:45Z" + }, + "call": [ + { + "op": "search", + "question": "what data do you have?" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "what data do you have?" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3b78bd49dd0a4d24b3dfd8daa70035a3" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "what data do you have?", + "normalized_query": "what data do you have?", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b78bd49dd0a4d24b3dfd8daa70035a3", + "warnings": [], + "timing_ms": { + "total": 802, + "by_step": { + "coverage": 0, + "extract": 802 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 45, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "catalogue", + "scope": {} + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "catalogue", + "sentence": null, + "complete": false, + "specs": [], + "gaps": [] + } + }, + { + "error": { + "class": "DeclinedError", + "code": "answer_declined", + "trace_id": "3b78bd49dd0a4d24b3dfd8daa70035a3" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json new file mode 100644 index 0000000..1d2ce6c --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json @@ -0,0 +1,95 @@ +{ + "format_version": 1, + "name": "answer-declined", + "description": "A question that asks for analysis answers declined, with no parts and no sentence, and is not complete. Fetching it raises DeclinedError with no request.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:43Z" + }, + "call": [ + { + "op": "search", + "question": "should donors give more aid to Kenya?" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "should donors give more aid to Kenya?" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e61600f8e689429293ea320f5079509e" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "should donors give more aid to Kenya?", + "normalized_query": "should donors give more aid to Kenya?", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "e61600f8e689429293ea320f5079509e", + "warnings": [], + "timing_ms": { + "total": 2060, + "by_step": { + "coverage": 0, + "extract": 2058 + } + }, + "llm_usage": { + "input_tokens": 2251, + "output_tokens": 97, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "declined", + "reason": "requires_analysis", + "scope": { + "place": { + "ref": "country/KEN", + "label": "Kenya" + } + } + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "declined", + "sentence": null, + "complete": false, + "specs": [], + "gaps": [] + } + }, + { + "error": { + "class": "DeclinedError", + "code": "answer_declined", + "trace_id": "e61600f8e689429293ea320f5079509e" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.json new file mode 100644 index 0000000..54c1b69 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.json @@ -0,0 +1,4542 @@ +{ + "format_version": 1, + "name": "answer-definite-fetch", + "description": "A question with one reading answers definite, and fetching the answer builds the part's spec as bare Parquet, follows the files route's redirect with a bare request, and returns one member whose parts hold the part's variable text and whose sentence is the part's spec.resolved.rendered_sentence, with no Search call after the first.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:04:59Z" + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "d14640239a5a4ffa8f113140eb5b23a0" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "58cc82a3079f4e4298eb45378fdf10db" + }, + "body_file": "answer-definite-fetch.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "complete": true, + "specs": [ + "spec_774d6c001a6250aa67ca676ab067895e" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [], + "search_warning": false + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.parquet b/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.parquet new file mode 100644 index 0000000..63e4b1c Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/answer-definite-fetch.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-definition-spec-id-mismatch.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-definition-spec-id-mismatch.json new file mode 100644 index 0000000..010956c --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-definition-spec-id-mismatch.json @@ -0,0 +1,3687 @@ +{ + "format_version": 1, + "name": "answer-definition-spec-id-mismatch", + "description": "A Search spec whose definition.spec_id differs from its spec_id raises ContractError contract_violation, in a Search response as in a ref.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "Part 0's spec definition names spec_id spec_00000000000000000000000000000000, and the fetch goes." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_00000000000000000000000000000000", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-empty-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-empty-parts.json new file mode 100644 index 0000000..c9d2c46 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-empty-parts.json @@ -0,0 +1,106 @@ +{ + "format_version": 1, + "name": "answer-empty-parts", + "description": "A resolution with no parts, which the served schema gives at least one, raises ContractError contract_violation at /parts.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The answer's parts become []." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-folded-parts-unnamed.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-folded-parts-unnamed.json new file mode 100644 index 0000000..6432111 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-folded-parts-unnamed.json @@ -0,0 +1,15436 @@ +{ + "format_version": 1, + "name": "answer-folded-parts-unnamed", + "description": "A definite part whose variable_text is absent or empty adds nothing to its member's parts, so the member that answers both names no part and its rows' part value is its sentence.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-several-readings-folded", + "edit": "The first folded part loses its variable_text and the second's becomes an empty string." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3ceef86d0eac49fa96380d3340878cf1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya", + "normalized_query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3ceef86d0eac49fa96380d3340878cf1", + "warnings": [], + "timing_ms": { + "total": 5613, + "by_step": { + "coverage": 0, + "extract": 1020 + } + }, + "llm_usage": { + "input_tokens": 15731, + "output_tokens": 1021, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "warnings": [], + "timing_ms": { + "total": 3674, + "by_step": { + "recall": 773, + "shape_arcs": 0, + "shape_probe_coverage": 11, + "shape_probe": 224, + "shape_groups": 26, + "shape_labels": 8, + "shape_admission": 0, + "shape": 1251, + "bind": 1411, + "materialise": 115, + "answer": 15, + "options": 109 + } + }, + "restatement": { + "variable_text": "ODA disbursements for health", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 545, + "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + } + ] + }, + "expansion": { + "added": [ + { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + { + "ref": "CRSPurposeCode12110", + "label": "health policy and administrative management" + }, + { + "ref": "CRSPurposeCode12181", + "label": "medical education and training" + }, + { + "ref": "CRSPurposeCode12182", + "label": "medical research" + }, + { + "ref": "CRSPurposeCode12191", + "label": "medical service" + }, + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + { + "ref": "CRSPurposeCode12230", + "label": "basic health infrastructure" + }, + { + "ref": "CRSPurposeCode12240", + "label": "basic nutrition" + }, + { + "ref": "CRSPurposeCode12250", + "label": "infectious disease control" + }, + { + "ref": "CRSPurposeCode12261", + "label": "health education" + }, + { + "ref": "CRSPurposeCode12262", + "label": "malaria control" + }, + { + "ref": "CRSPurposeCode12263", + "label": "tuberculosis control" + }, + { + "ref": "CRSPurposeCode12264", + "label": "COVID-19 control" + }, + { + "ref": "CRSPurposeCode12281", + "label": "health personnel development" + }, + { + "ref": "CRSPurposeCode12310", + "label": "general noncommunicable disease control" + }, + { + "ref": "CRSPurposeCode12320", + "label": "tobacco use control" + }, + { + "ref": "CRSPurposeCode12330", + "label": "control of harmful use of alcohol and drugs" + }, + { + "ref": "CRSPurposeCode12340", + "label": "mental health and well-being promotion" + }, + { + "ref": "CRSPurposeCode12350", + "label": "other noncommunicable disease prevention and treatment" + }, + { + "ref": "CRSPurposeCode12382", + "label": "research for noncommunicable disease prevention and control" + } + ] + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 108, + "member_count_exact": true, + "served_count": 545, + "data_date_range": { + "start": "1997", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "breadth", + "has_data": true, + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 12 + }, + { + "label": "variables", + "count": 51 + } + ] + }, + "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 104, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 21, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 83, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 111, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 84, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE", + "label": "scholarship and student cost in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 38, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 819, + "served_rows": 19, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 315, + "served_rows": 19, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 6, + "served_rows": 82, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 108, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 3, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode111", + "label": "unspecified-level education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 78, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode112", + "label": "basic education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 77, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode113", + "label": "upper secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 5, + "served_rows": 69, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode114", + "label": "post-secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 4, + "served_rows": 94, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance420", + "label": "debt instrument" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance420", + "member_count": 4620, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 512, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + }, + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_b438dc000255d174bcc13eb675e603f7", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 512, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_e348565295de394da8ddaa23ec5fa475", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 519, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 2, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 105 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 3 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 7, + "undeclared_count": 19, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 27 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 21 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 16 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 15 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 8 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + }, + { + "variable_text": "", + "warnings": [ + { + "code": "binding_folded", + "severity": "info", + "message": "'ODA disbursements for education' resolved to the same shape as an earlier part; folded into that part's spec." + } + ], + "timing_ms": { + "total": 3542, + "by_step": { + "recall": 791, + "shape_arcs": 0, + "shape_probe_coverage": 2, + "shape_probe": 240, + "shape_groups": 39, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1008, + "bind": 1505, + "materialise": 146, + "answer": 13, + "options": 79 + } + }, + "restatement": { + "variable_text": "ODA disbursements for education", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 545, + "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + } + ] + }, + "expansion": { + "added": [ + { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + { + "ref": "CRSPurposeCode12110", + "label": "health policy and administrative management" + }, + { + "ref": "CRSPurposeCode12181", + "label": "medical education and training" + }, + { + "ref": "CRSPurposeCode12182", + "label": "medical research" + }, + { + "ref": "CRSPurposeCode12191", + "label": "medical service" + }, + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + { + "ref": "CRSPurposeCode12230", + "label": "basic health infrastructure" + }, + { + "ref": "CRSPurposeCode12240", + "label": "basic nutrition" + }, + { + "ref": "CRSPurposeCode12250", + "label": "infectious disease control" + }, + { + "ref": "CRSPurposeCode12261", + "label": "health education" + }, + { + "ref": "CRSPurposeCode12262", + "label": "malaria control" + }, + { + "ref": "CRSPurposeCode12263", + "label": "tuberculosis control" + }, + { + "ref": "CRSPurposeCode12264", + "label": "COVID-19 control" + }, + { + "ref": "CRSPurposeCode12281", + "label": "health personnel development" + }, + { + "ref": "CRSPurposeCode12310", + "label": "general noncommunicable disease control" + }, + { + "ref": "CRSPurposeCode12320", + "label": "tobacco use control" + }, + { + "ref": "CRSPurposeCode12330", + "label": "control of harmful use of alcohol and drugs" + }, + { + "ref": "CRSPurposeCode12340", + "label": "mental health and well-being promotion" + }, + { + "ref": "CRSPurposeCode12350", + "label": "other noncommunicable disease prevention and treatment" + }, + { + "ref": "CRSPurposeCode12382", + "label": "research for noncommunicable disease prevention and control" + } + ] + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 108, + "member_count_exact": true, + "served_count": 545, + "data_date_range": { + "start": "1997", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "breadth", + "has_data": true, + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 12 + }, + { + "label": "variables", + "count": 51 + } + ] + }, + "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 104, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 21, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 83, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 111, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 84, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE", + "label": "scholarship and student cost in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 38, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 819, + "served_rows": 19, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 315, + "served_rows": 19, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 6, + "served_rows": 82, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 108, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 3, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode111", + "label": "unspecified-level education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 78, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode112", + "label": "basic education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 77, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode113", + "label": "upper secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 5, + "served_rows": 69, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode114", + "label": "post-secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 4, + "served_rows": 94, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance420", + "label": "debt instrument" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance420", + "member_count": 4620, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 512, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + }, + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_b438dc000255d174bcc13eb675e603f7", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 512, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_e348565295de394da8ddaa23ec5fa475", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 519, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 2, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 105 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 3 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 7, + "undeclared_count": 19, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 27 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 21 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 16 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 15 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 8 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + }, + { + "variable_text": "GDP", + "warnings": [ + { + "code": "direction_discarded", + "severity": "warn", + "message": "Germany was named as the provider; this shape reports the place as its own subject, so the direction was dropped." + }, + { + "code": "direction_discarded", + "severity": "warn", + "message": "Kenya was named as the recipient; this shape reports the place as its own subject, so the direction was dropped." + } + ], + "timing_ms": { + "total": 3536, + "by_step": { + "recall": 778, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 277, + "shape_groups": 24, + "shape_labels": 5, + "shape_admission": 1, + "shape": 973, + "bind": 1109, + "materialise": 1, + "answer": 210, + "options": 465 + } + }, + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Germany", + "text": "You named Germany as a provider. This measure has no providers, so this shows the place itself." + }, + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Kenya", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "definition": { + "schema_version": 1, + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 132, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 132, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossValueAdded", + "label": "GrossValueAdded" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetDomesticProduction", + "label": "Net Domestic Production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetValueAdded", + "label": "Net Value Added" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinanceService", + "label": "Finance Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MOSPI_OtherService", + "label": "MOSPI Other Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TradeSector", + "label": "Trade Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialServices", + "label": "Financial Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Industry", + "label": "Industry" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Services", + "label": "Services" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "options": [ + { + "value": { + "ref": { + "ref": "NAICS/23", + "label": "Construction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/44-45", + "label": "Retail trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/53", + "label": "Real estate and rental and leasing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/22", + "label": "Utilities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/55", + "label": "Management of companies and enterprises" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/48-49", + "label": "Transportation and warehousing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/61", + "label": "Educational services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/51", + "label": "Information" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/42", + "label": "Wholesale trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/21", + "label": "Mining, quarrying, and oil and gas extraction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/11", + "label": "Agriculture, forestry, fishing and hunting" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/72", + "label": "Accommodation and food services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/52", + "label": "Finance and insurance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/54", + "label": "Professional, Scientific, and Technical Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/71", + "label": "Arts, entertainment, and recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/311-316_322-326", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/31-33", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/321_327-339", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/56", + "label": "Administrative and Support and Waste Management Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/62", + "label": "Health care and social assistance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/81", + "label": "Other services, except public administration" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/92", + "label": "Public administration" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Euro", + "label": "Euro" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NationalCurrency", + "label": "NationalCurrency" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PurchasingPowerStandard", + "label": "PurchasingPowerStandard" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "equivalent_readings": [ + { + "spec_id": "spec_2a65bb3dc1332b16173c540e3392b139", + "definition": { + "schema_version": 1, + "spec_id": "spec_2a65bb3dc1332b16173c540e3392b139", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicProduction", + "measured_property": "valueAdded", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "currencyConversionBasis", + "binding": { + "state": "unbound" + } + }, + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + }, + { + "property": "productTaxBasis", + "binding": { + "state": "value", + "ref": "IncludingProductTaxes" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "CurrencyUSD" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicproduction_valueadded_measuredvalue_nominal", + "label": "Gross domestic product (GDP)", + "population_type": { + "ref": "EconomicProduction", + "label": "economic production" + }, + "measured_property": { + "ref": "valueAdded", + "label": "value added" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 2, + "member_digest": "ef9c4356618ed98aab762248e68799d78c74ad249a6041dad0e8a345c85ee02f", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "currencyConversionBasis" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1980", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 92, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 46 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 92, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1980, + "end_year": 2025 + }, + "licence": { + "label": "IMF Copyright and Usage" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + }, + "unit": { + "basis": "bound", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PurchasingPowerParityRate", + "label": "purchasing power parity rate" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_4535d09baf2bdffef7c19c7796e96687", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS). GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators. You named Germany as a provider. This measure has no providers, so this shows the place itself. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": "You named Germany as a provider. This measure has no providers, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "ee49afa94b0440c9b557ce3413d538a5" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ], + "state": "set" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/KEN" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_d6ce435ea267b46680c94eae9423d420", + "prepared_at": "2026-10-21T13:05:29Z", + "coverage": { + "rows": 512, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 28 + } + ], + "window": { + "kind": "all", + "start_year": 1997, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1997, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 10 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 18 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 10 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 13 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 11 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 14 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 12 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 11 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 19 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 19 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 12 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB031_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB031_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB03_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB03_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB04_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB04_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB04_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance422_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance610_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "family_member_count": 545, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:29.417660+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 16150, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:29.374895+00:00", + "tier": "working", + "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d" + }, + { + "artifact_digest": "sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179", + "rendering": { + "statistics": "series" + }, + "bytes": 11612, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:29.374895+00:00", + "tier": "working", + "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179" + } + ], + "series_count": 108, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 108 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 28 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 29, + "cells": 3132 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 109, + "cells": 3052 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:29.374859Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d?X-Goog-Signature=redacted", + "x-dfo-trace-id": "cee84dbe25214a0f8ea3f0a28ce10adc" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "c3f031f1d3724d2ea9b19e58197e4f03" + }, + "body_file": "answer-several-readings-folded.parquet" + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "definition": { + "schema_version": 1, + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e043b83fa1f8472e814c68afde278ab8" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "EconomicActivity", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "GrossDomesticProduction", + "state": "value" + }, + "property": "activitySource" + }, + { + "binding": { + "state": "unbound" + }, + "property": "economicSector" + }, + { + "binding": { + "state": "unbound" + }, + "property": "naics" + }, + { + "binding": { + "state": "unbound" + }, + "property": "schoolGradeLevel" + } + ], + "facets": { + "unit": { + "ref": "USDollar", + "state": "value" + } + }, + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_91f57bfc5bbc5f09983596996238787d", + "prepared_at": "2026-10-21T13:05:30Z", + "coverage": { + "rows": 132, + "dimensions": [ + { + "label": "observationAbout", + "count": 2 + }, + { + "label": "years", + "count": 66 + } + ], + "window": { + "kind": "all", + "start_year": 1960, + "end_year": 2025, + "origin": "default" + } + }, + "citation": { + "text": "World Development Indicators (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "license": "Creative Commons Attribution License", + "license_type": "CreativeCommonsAttributionLicense", + "license_url": "https://datacatalog.worldbank.org/search/dataset/0037712", + "url": "https://datatopics.worldbank.org/world-development-indicators/", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": { + "publisher": "World Bank", + "description": "The primary World Bank collection of development indicators encompassing global economic and social data.", + "source_data_url": "http://api.worldbank.org/v2/en/country/AFG?downloadformat=csv", + "update_cadence": "Monthly", + "last_update": "2026-10-13", + "currencies": [], + "transformation_log": [], + "version_history": [] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1960, + "end_year": 2025, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "dc/base/WorldDevelopmentIndicators", + "revision": "2026-10-13" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_EconomicActivity_GrossDomesticProduction_Nominal", + "roles": [ + "observationAbout" + ], + "observation_count": 132 + } + ], + "family_member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "family_member_count": 65, + "facets": [ + { + "axis": "provenance", + "ref": "dc/base/WorldDevelopmentIndicators", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "8535402560764839853" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "8535402560764839853" + }, + { + "axis": "unit", + "ref": "USDollar", + "basis": "bound", + "default_policy": null, + "default_policy_version": null, + "selection_reason": null, + "dispatch_facet_id": "8535402560764839853" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:30.811140+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 6545, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:30.778158+00:00", + "tier": "working", + "url": "/api/datasets/spec_f8dea3052d1ef6ba5667628815d1a663/cv_91f57bfc5bbc5f09983596996238787d/files/sha256:9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839" + }, + { + "artifact_digest": "sha256:8eecb62c1741271464d6d66841353d96f7e36aa9c3915f7948ea7c78c7dbc9e7", + "rendering": { + "statistics": "series" + }, + "bytes": 5379, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:30.778158+00:00", + "tier": "working", + "url": "/api/datasets/spec_f8dea3052d1ef6ba5667628815d1a663/cv_91f57bfc5bbc5f09983596996238787d/files/sha256:8eecb62c1741271464d6d66841353d96f7e36aa9c3915f7948ea7c78c7dbc9e7" + } + ], + "series_count": 2, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "observationAbout", + "kind": "role", + "droppable": false, + "distinct": 2 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 66 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "observationAbout", + "field": "iso3", + "token": "observationAbout_iso3", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "iso2", + "token": "observationAbout_iso2", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "label", + "token": "observationAbout_label", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "type", + "token": "observationAbout_type", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "observationAbout_label" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "observationAbout", + "columns": "time_period", + "state": "available", + "width": 67, + "cells": 134 + }, + { + "index": "time_period", + "columns": "observationAbout", + "state": "available", + "width": 3, + "cells": 198 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:30.778009Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_f8dea3052d1ef6ba5667628815d1a663/cv_91f57bfc5bbc5f09983596996238787d/files/sha256:9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted", + "x-dfo-trace-id": "8bf21c550f584bcaa21bcb8d69498a7d" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "8072bc19c0fc4a5aa825d37c5956317c" + }, + "body_file": "answer-several-readings-folded-2.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS). GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators. You named Germany as a provider. This measure has no providers, so this shows the place itself. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "complete": true, + "specs": [ + "spec_25f482395c5d012ec278118f38dff29c", + "spec_f8dea3052d1ef6ba5667628815d1a663" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 644, + "columns": [ + "part", + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label", + "stat_var_label", + "observationAbout", + "observationAbout_label" + ], + "part_rows": [ + { + "part": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "rows": 512 + }, + { + "part": "GDP", + "rows": 132 + } + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "content_version": "cv_d6ce435ea267b46680c94eae9423d420", + "sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + { + "parts": [ + "GDP" + ], + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "content_version": "cv_91f57bfc5bbc5f09983596996238787d", + "sentence": "GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators." + } + ], + "missing": [], + "search_warning": true + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.json new file mode 100644 index 0000000..4cd0f57 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.json @@ -0,0 +1,4226 @@ +{ + "format_version": 1, + "name": "answer-mixed-fetch-partial", + "description": "Fetching the mixed answer with partial=True builds only the answered part and returns a dataset that is not complete, with part 1's not_understood gap in missing.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:16Z" + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + }, + { + "op": "fetch", + "partial": true + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "8571f47c3ca8460f8e9a594da2fc942b" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "8571f47c3ca8460f8e9a594da2fc942b", + "warnings": [], + "timing_ms": { + "total": 3603, + "by_step": { + "coverage": 0, + "extract": 839 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 2304 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 2725, + "by_step": { + "recall": 1, + "shape_arcs": 1, + "shape_probe_coverage": 12, + "shape_probe": 13, + "shape_groups": 5, + "shape_labels": 8, + "shape_admission": 0, + "shape": 788, + "bind": 1929, + "materialise": 4, + "answer": 0, + "options": 3 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 12, + "by_step": { + "recall": 1, + "shape_arcs": 1, + "shape_probe": 5, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 1, + "shape": 11 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "variable_not_resolved", + "category": "unresolved", + "message": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "afabd49505e34d9d91854d77caca574d" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "ServicingPayment", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "financingResource" + }, + { + "binding": { + "state": "unbound" + }, + "property": "guaranteeStatus" + }, + { + "binding": { + "state": "unbound" + }, + "property": "idsConcessionality" + }, + { + "binding": { + "state": "unbound" + }, + "property": "idsCreditorType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "idsDebtorType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "includesIMFCredit" + }, + { + "binding": { + "state": "unbound" + }, + "property": "maturityBand" + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_2c981b422e8f8bdf5dee6067837cff13", + "prepared_at": "2026-10-21T13:05:20Z", + "coverage": { + "rows": 55, + "dimensions": [ + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "debtor", + "plural": "debtors" + } + }, + { + "label": "years", + "count": 55 + } + ], + "window": { + "kind": "all", + "start_year": 1970, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "World Bank International Debt Statistics (IDS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "license": "Creative Commons Attribution License", + "license_type": "CreativeCommonsAttributionLicense", + "license_url": "https://datacatalog.worldbank.org/public-licenses?fragment=cc", + "url": "https://datacatalog.worldbank.org/search/dataset/0038015/international-debt-statistics", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "World Bank", + "description": "International Debt Statistics (IDS) is the World Bank's annual dataset on the external debt of low- and middle-income countries. It reports debt stocks, disbursements, debt service and projected repayments by borrower and creditor type, with public and publicly guaranteed debt broken down by creditor, from 1970 onwards. The data come mainly from countries' loan-by-loan reporting of public and publicly guaranteed debt to the World Bank's Debtor Reporting System, which is a condition of borrowing from IBRD and IDA.", + "source_data_url": "https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092201/A_D.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092202/E_K.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092203/L_M.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0093225/N_Q.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092204/R_U.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092205/V_Z.xlsx", + "attribution": "International Debt Statistics by the World Bank, https://datacatalog.worldbank.org/search/dataset/0038015/international-debt-statistics, licensed under CC BY 4.0. Modified by The ONE Campaign.", + "update_cadence": "Annual", + "last_update": "2026-10-13", + "years_covered": "1970-2032", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The World Bank publishes IDS as six bulk files, split by debtor name. All six are downloaded each time the pipeline runs, and replace the previous copy, so the data reflects the World Bank's latest release." + }, + { + "transformation": "Exclude series outside the debt statistics", + "description": "Non-debt statistics are excluded, including population, balance of payments, investment and reserves. GNI is kept, because some debt ratios are shares of it. Exports of goods, services and primary income, and the three debt ratios that are shares of it, are excluded until the ontology can describe them. Debt forgiveness grants, the stock-flow reconciliation residual, the annual changes in debt stocks and interest arrears, and the present value of debt are also excluded." + }, + { + "transformation": "Omit zeros where no lending took place", + "description": "IDS reports a value for every debtor, creditor and series, including pairs with no lending between them, so most figures are zero. Zeros are kept on world totals, and within or after a period of lending between a debtor and a creditor. They are omitted where a creditor has not lent to a debtor, for the years before lending began, and for averages in years with no new commitments, since there is nothing to average." + }, + { + "transformation": "Standardise debtors and creditors", + "description": "Debtor and creditor codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. Where a series names a single lender in its code, such as debt owed to the IBRD, that lender becomes the creditor." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the debtor and the creditor, and the dimensions the World Bank encodes in each series code, such as type of flow, maturity and creditor type. GNI is the exception: it describes the debtor economy, so it is reported against the year and the economy alone. Ratios record what they are a share of: GNI or total external debt stocks. Every amount is reported in US dollars at current prices." + }, + { + "transformation": "Mark projections as estimated", + "description": "For the years after the last reported year, the World Bank projects debt service and disbursements on commitments already made. These values are marked as estimated, so they are kept apart from reported values." + } + ], + "version_history": [ + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "External debt stocks, flows and debt service of low- and middle-income countries by borrower and creditor, with related ratios and gross national income." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1970, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/WorldBankInternationalDebtStatistics", + "revision": "2026-10-13" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_ServicingPayment_Nominal", + "roles": [ + "financingRecipient" + ], + "observation_count": 55 + } + ], + "family_member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "family_member_count": 65, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "most_observations", + "dispatch_facet_id": "2052749850102211920" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "2052749850102211920" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "most_observations", + "dispatch_facet_id": "2052749850102211920" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:20.852361+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:674d9a4ab33eabc631aba510ed88f9d45ddeef43d11d2aee7b267bd1e3546143", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 6025, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:20.814206+00:00", + "tier": "working", + "url": "/api/datasets/spec_78d04fefc3b3f1ef71acd622957e4995/cv_2c981b422e8f8bdf5dee6067837cff13/files/sha256:674d9a4ab33eabc631aba510ed88f9d45ddeef43d11d2aee7b267bd1e3546143" + }, + { + "artifact_digest": "sha256:8da8a5b081cc06acba677ac2c668e4bcafb796bf040bede5de00740acda9c9ee", + "rendering": { + "statistics": "series" + }, + "bytes": 5343, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:20.814206+00:00", + "tier": "working", + "url": "/api/datasets/spec_78d04fefc3b3f1ef71acd622957e4995/cv_2c981b422e8f8bdf5dee6067837cff13/files/sha256:8da8a5b081cc06acba677ac2c668e4bcafb796bf040bede5de00740acda9c9ee" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 55 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:20.813993Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_78d04fefc3b3f1ef71acd622957e4995/cv_2c981b422e8f8bdf5dee6067837cff13/files/sha256:674d9a4ab33eabc631aba510ed88f9d45ddeef43d11d2aee7b267bd1e3546143" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A674d9a4ab33eabc631aba510ed88f9d45ddeef43d11d2aee7b267bd1e3546143?X-Goog-Signature=redacted", + "x-dfo-trace-id": "f4cc6b35ba294a0380ca97496ec86733" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A674d9a4ab33eabc631aba510ed88f9d45ddeef43d11d2aee7b267bd1e3546143?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "7ffed6c80e5f484c9a566956adb5c5c0" + }, + "body_file": "answer-mixed-fetch-partial.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "complete": false, + "specs": [ + "spec_78d04fefc3b3f1ef71acd622957e4995" + ], + "gaps": [ + { + "part": 1, + "kind": "not_understood", + "options": 0 + } + ] + } + }, + { + "dataset": { + "rows": 55, + "columns": [ + "stat_var", + "stat_var_label", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": false, + "members": [ + { + "parts": [ + "debt service" + ], + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "content_version": "cv_2c981b422e8f8bdf5dee6067837cff13", + "sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS)." + } + ], + "missing": [ + { + "part": 1, + "kind": "not_understood" + } + ], + "search_warning": false + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.parquet b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.parquet new file mode 100644 index 0000000..58643c6 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-partial.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-raises.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-raises.json new file mode 100644 index 0000000..4ebd2d7 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-mixed-fetch-raises.json @@ -0,0 +1,3633 @@ +{ + "format_version": 1, + "name": "answer-mixed-fetch-raises", + "description": "A question with one answered part and one part Search cannot read answers mixed, incomplete, with a not_understood gap on part 1. Fetching it raises IncompleteAnswerError before any build.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:11Z" + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3b0a506d6d2a43a0becd94837bafffa1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1", + "warnings": [], + "timing_ms": { + "total": 4692, + "by_step": { + "coverage": 0, + "extract": 1001 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 3475, + "by_step": { + "recall": 434, + "shape_arcs": 3, + "shape_probe_coverage": 4, + "shape_probe": 243, + "shape_groups": 3, + "shape_labels": 9, + "shape_admission": 0, + "shape": 893, + "bind": 1563, + "materialise": 9, + "answer": 381, + "options": 195 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 574, + "by_step": { + "recall": 380, + "shape_arcs": 1, + "shape_probe": 190, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 0, + "shape": 194 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "variable_not_resolved", + "category": "unresolved", + "message": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "complete": false, + "specs": [ + "spec_78d04fefc3b3f1ef71acd622957e4995" + ], + "gaps": [ + { + "part": 1, + "kind": "not_understood", + "options": 0 + } + ] + } + }, + { + "error": { + "class": "IncompleteAnswerError", + "code": "answer_incomplete", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-nested-specs-unchecked.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-nested-specs-unchecked.json new file mode 100644 index 0000000..9d673fd --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-nested-specs-unchecked.json @@ -0,0 +1,3542 @@ +{ + "format_version": 1, + "name": "answer-nested-specs-unchecked", + "description": "A client checks strict members only where a rule reads them, so a Spec in no_data.flagged_match, no_data.alternate_match or resolved.equivalent_readings may lack resolved and identity, and the search and the choice reach the same answers.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-place-one-part", + "edit": "The no_data part's flagged_match and alternate_match, and the chosen spec's resolved.equivalent_readings, hold the chosen spec without resolved and without its definition's identity." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1ad25aff9f6a4ad7ac21922af623e5e9" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "1ad25aff9f6a4ad7ac21922af623e5e9", + "warnings": [], + "timing_ms": { + "total": 1084, + "by_step": { + "coverage": 0, + "extract": 1082 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ], + "flagged_match": { + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "definition": { + "schema_version": 1, + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3" + } + }, + "alternate_match": { + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "definition": { + "schema_version": 1, + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3" + } + } + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "11f83a7e47c0452492b5c433c0829ff3" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "parsed", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "11f83a7e47c0452492b5c433c0829ff3", + "warnings": [], + "timing_ms": { + "total": 2651, + "by_step": { + "coverage": 0 + } + }, + "llm_usage": { + "input_tokens": 4231, + "output_tokens": 200, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 2337, + "by_step": { + "recall": 0, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 205, + "shape_groups": 20, + "shape_labels": 2, + "shape_admission": 0, + "shape": 1074, + "bind": 1250, + "materialise": 6, + "answer": 5, + "options": 2 + } + }, + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "definition": { + "schema_version": 1, + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/COD" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 65, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 65, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 45, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 65, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 59, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 29, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "slot": "dac2aAidType", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_2e1f188265cd4f5123438ee26a59cc9e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/COD" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 65, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "CDF", + "origin": "EUR" + } + }, + "equivalent_readings": [ + { + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "definition": { + "schema_version": 1, + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3" + } + } + ] + } + } + } + ], + "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "complete": true, + "specs": [ + "spec_53b1ed52ebddd28ce274d419b53037c3" + ], + "gaps": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-operations-not-a-list.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-operations-not-a-list.json new file mode 100644 index 0000000..d312360 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-operations-not-a-list.json @@ -0,0 +1,4545 @@ +{ + "format_version": 1, + "name": "answer-operations-not-a-list", + "description": "A member a client reads that no strict pointer names, and that holds a JSON type other than its schema's, reads as absent: the part has no operation, and the fetch issues no SearchWarning and reaches the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "Part 0's operations becomes one operation object in place of a list." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": { + "verb": "growth", + "phrase": "growth of GDP", + "over": "year" + }, + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "d14640239a5a4ffa8f113140eb5b23a0" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "58cc82a3079f4e4298eb45378fdf10db" + }, + "body_file": "answer-definite-fetch.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "complete": true, + "specs": [ + "spec_774d6c001a6250aa67ca676ab067895e" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [], + "search_warning": false + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-part-status-not-a-string.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-part-status-not-a-string.json new file mode 100644 index 0000000..f77f48d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-part-status-not-a-string.json @@ -0,0 +1,3611 @@ +{ + "format_version": 1, + "name": "answer-part-status-not-a-string", + "description": "A part whose status is not a string raises ContractError contract_violation at /parts/1/status, where an unknown string status is an unknown gap.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-mixed-fetch-raises", + "edit": "Part 1's status becomes the number 7, and the fetch goes." + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3b0a506d6d2a43a0becd94837bafffa1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1", + "warnings": [], + "timing_ms": { + "total": 4692, + "by_step": { + "coverage": 0, + "extract": 1001 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 3475, + "by_step": { + "recall": 434, + "shape_arcs": 3, + "shape_probe_coverage": 4, + "shape_probe": 243, + "shape_groups": 3, + "shape_labels": 9, + "shape_admission": 0, + "shape": 893, + "bind": 1563, + "materialise": 9, + "answer": 381, + "options": 195 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 574, + "by_step": { + "recall": 380, + "shape_arcs": 1, + "shape_probe": 190, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 0, + "shape": 194 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": 7, + "no_data": { + "reason": "variable_not_resolved", + "category": "unresolved", + "message": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded-2.parquet b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded-2.parquet new file mode 100644 index 0000000..345d1c5 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded-2.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.json new file mode 100644 index 0000000..969afb3 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.json @@ -0,0 +1,15441 @@ +{ + "format_version": 1, + "name": "answer-several-readings-folded", + "description": "A question with three definite parts, the first two folded into one spec_id (binding_folded), builds each distinct spec_id once, in part order, each through build, files and download before the next. The dataset stacks two members, the first answering both folded parts, into one table with a part column first and each member's columns in member order.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:20Z" + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3ceef86d0eac49fa96380d3340878cf1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya", + "normalized_query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3ceef86d0eac49fa96380d3340878cf1", + "warnings": [], + "timing_ms": { + "total": 5613, + "by_step": { + "coverage": 0, + "extract": 1020 + } + }, + "llm_usage": { + "input_tokens": 15731, + "output_tokens": 1021, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements for health", + "warnings": [], + "timing_ms": { + "total": 3674, + "by_step": { + "recall": 773, + "shape_arcs": 0, + "shape_probe_coverage": 11, + "shape_probe": 224, + "shape_groups": 26, + "shape_labels": 8, + "shape_admission": 0, + "shape": 1251, + "bind": 1411, + "materialise": 115, + "answer": 15, + "options": 109 + } + }, + "restatement": { + "variable_text": "ODA disbursements for health", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 545, + "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + } + ] + }, + "expansion": { + "added": [ + { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + { + "ref": "CRSPurposeCode12110", + "label": "health policy and administrative management" + }, + { + "ref": "CRSPurposeCode12181", + "label": "medical education and training" + }, + { + "ref": "CRSPurposeCode12182", + "label": "medical research" + }, + { + "ref": "CRSPurposeCode12191", + "label": "medical service" + }, + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + { + "ref": "CRSPurposeCode12230", + "label": "basic health infrastructure" + }, + { + "ref": "CRSPurposeCode12240", + "label": "basic nutrition" + }, + { + "ref": "CRSPurposeCode12250", + "label": "infectious disease control" + }, + { + "ref": "CRSPurposeCode12261", + "label": "health education" + }, + { + "ref": "CRSPurposeCode12262", + "label": "malaria control" + }, + { + "ref": "CRSPurposeCode12263", + "label": "tuberculosis control" + }, + { + "ref": "CRSPurposeCode12264", + "label": "COVID-19 control" + }, + { + "ref": "CRSPurposeCode12281", + "label": "health personnel development" + }, + { + "ref": "CRSPurposeCode12310", + "label": "general noncommunicable disease control" + }, + { + "ref": "CRSPurposeCode12320", + "label": "tobacco use control" + }, + { + "ref": "CRSPurposeCode12330", + "label": "control of harmful use of alcohol and drugs" + }, + { + "ref": "CRSPurposeCode12340", + "label": "mental health and well-being promotion" + }, + { + "ref": "CRSPurposeCode12350", + "label": "other noncommunicable disease prevention and treatment" + }, + { + "ref": "CRSPurposeCode12382", + "label": "research for noncommunicable disease prevention and control" + } + ] + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 108, + "member_count_exact": true, + "served_count": 545, + "data_date_range": { + "start": "1997", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "breadth", + "has_data": true, + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 12 + }, + { + "label": "variables", + "count": 51 + } + ] + }, + "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 104, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 21, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 83, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 111, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 84, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE", + "label": "scholarship and student cost in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 38, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 819, + "served_rows": 19, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 315, + "served_rows": 19, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 6, + "served_rows": 82, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 108, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 3, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode111", + "label": "unspecified-level education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 78, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode112", + "label": "basic education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 77, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode113", + "label": "upper secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 5, + "served_rows": 69, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode114", + "label": "post-secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 4, + "served_rows": 94, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance420", + "label": "debt instrument" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance420", + "member_count": 4620, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 512, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + }, + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_b438dc000255d174bcc13eb675e603f7", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 512, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_e348565295de394da8ddaa23ec5fa475", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 519, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 2, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 105 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 3 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 7, + "undeclared_count": 19, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 27 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 21 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 16 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 15 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 8 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + }, + { + "variable_text": "ODA disbursements for education", + "warnings": [ + { + "code": "binding_folded", + "severity": "info", + "message": "'ODA disbursements for education' resolved to the same shape as an earlier part; folded into that part's spec." + } + ], + "timing_ms": { + "total": 3542, + "by_step": { + "recall": 791, + "shape_arcs": 0, + "shape_probe_coverage": 2, + "shape_probe": 240, + "shape_groups": 39, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1008, + "bind": 1505, + "materialise": 146, + "answer": 13, + "options": 79 + } + }, + "restatement": { + "variable_text": "ODA disbursements for education", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 545, + "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + } + ] + }, + "expansion": { + "added": [ + { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + { + "ref": "CRSPurposeCode12110", + "label": "health policy and administrative management" + }, + { + "ref": "CRSPurposeCode12181", + "label": "medical education and training" + }, + { + "ref": "CRSPurposeCode12182", + "label": "medical research" + }, + { + "ref": "CRSPurposeCode12191", + "label": "medical service" + }, + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + { + "ref": "CRSPurposeCode12230", + "label": "basic health infrastructure" + }, + { + "ref": "CRSPurposeCode12240", + "label": "basic nutrition" + }, + { + "ref": "CRSPurposeCode12250", + "label": "infectious disease control" + }, + { + "ref": "CRSPurposeCode12261", + "label": "health education" + }, + { + "ref": "CRSPurposeCode12262", + "label": "malaria control" + }, + { + "ref": "CRSPurposeCode12263", + "label": "tuberculosis control" + }, + { + "ref": "CRSPurposeCode12264", + "label": "COVID-19 control" + }, + { + "ref": "CRSPurposeCode12281", + "label": "health personnel development" + }, + { + "ref": "CRSPurposeCode12310", + "label": "general noncommunicable disease control" + }, + { + "ref": "CRSPurposeCode12320", + "label": "tobacco use control" + }, + { + "ref": "CRSPurposeCode12330", + "label": "control of harmful use of alcohol and drugs" + }, + { + "ref": "CRSPurposeCode12340", + "label": "mental health and well-being promotion" + }, + { + "ref": "CRSPurposeCode12350", + "label": "other noncommunicable disease prevention and treatment" + }, + { + "ref": "CRSPurposeCode12382", + "label": "research for noncommunicable disease prevention and control" + } + ] + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 108, + "member_count_exact": true, + "served_count": 545, + "data_date_range": { + "start": "1997", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "breadth", + "has_data": true, + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 12 + }, + { + "label": "variables", + "count": 51 + } + ] + }, + "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 104, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 21, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 83, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 111, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 84, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE", + "label": "scholarship and student cost in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 38, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 819, + "served_rows": 19, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 315, + "served_rows": 19, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 6, + "served_rows": 82, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 108, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 3, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode111", + "label": "unspecified-level education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 78, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode112", + "label": "basic education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 77, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode113", + "label": "upper secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 5, + "served_rows": 69, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode114", + "label": "post-secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 4, + "served_rows": 94, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance420", + "label": "debt instrument" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance420", + "member_count": 4620, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 512, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + }, + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_b438dc000255d174bcc13eb675e603f7", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 512, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_e348565295de394da8ddaa23ec5fa475", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 519, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 2, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 105 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 3 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 7, + "undeclared_count": 19, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 27 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 21 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 16 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 15 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 8 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + }, + { + "variable_text": "GDP", + "warnings": [ + { + "code": "direction_discarded", + "severity": "warn", + "message": "Germany was named as the provider; this shape reports the place as its own subject, so the direction was dropped." + }, + { + "code": "direction_discarded", + "severity": "warn", + "message": "Kenya was named as the recipient; this shape reports the place as its own subject, so the direction was dropped." + } + ], + "timing_ms": { + "total": 3536, + "by_step": { + "recall": 778, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 277, + "shape_groups": 24, + "shape_labels": 5, + "shape_admission": 1, + "shape": 973, + "bind": 1109, + "materialise": 1, + "answer": 210, + "options": 465 + } + }, + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Germany", + "text": "You named Germany as a provider. This measure has no providers, so this shows the place itself." + }, + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Kenya", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "definition": { + "schema_version": 1, + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 132, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 132, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossValueAdded", + "label": "GrossValueAdded" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetDomesticProduction", + "label": "Net Domestic Production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetValueAdded", + "label": "Net Value Added" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinanceService", + "label": "Finance Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MOSPI_OtherService", + "label": "MOSPI Other Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TradeSector", + "label": "Trade Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialServices", + "label": "Financial Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Industry", + "label": "Industry" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Services", + "label": "Services" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "options": [ + { + "value": { + "ref": { + "ref": "NAICS/23", + "label": "Construction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/44-45", + "label": "Retail trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/53", + "label": "Real estate and rental and leasing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/22", + "label": "Utilities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/55", + "label": "Management of companies and enterprises" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/48-49", + "label": "Transportation and warehousing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/61", + "label": "Educational services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/51", + "label": "Information" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/42", + "label": "Wholesale trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/21", + "label": "Mining, quarrying, and oil and gas extraction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/11", + "label": "Agriculture, forestry, fishing and hunting" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/72", + "label": "Accommodation and food services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/52", + "label": "Finance and insurance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/54", + "label": "Professional, Scientific, and Technical Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/71", + "label": "Arts, entertainment, and recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/311-316_322-326", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/31-33", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/321_327-339", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/56", + "label": "Administrative and Support and Waste Management Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/62", + "label": "Health care and social assistance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/81", + "label": "Other services, except public administration" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/92", + "label": "Public administration" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Euro", + "label": "Euro" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NationalCurrency", + "label": "NationalCurrency" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PurchasingPowerStandard", + "label": "PurchasingPowerStandard" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "equivalent_readings": [ + { + "spec_id": "spec_2a65bb3dc1332b16173c540e3392b139", + "definition": { + "schema_version": 1, + "spec_id": "spec_2a65bb3dc1332b16173c540e3392b139", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicProduction", + "measured_property": "valueAdded", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "currencyConversionBasis", + "binding": { + "state": "unbound" + } + }, + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + }, + { + "property": "productTaxBasis", + "binding": { + "state": "value", + "ref": "IncludingProductTaxes" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "CurrencyUSD" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicproduction_valueadded_measuredvalue_nominal", + "label": "Gross domestic product (GDP)", + "population_type": { + "ref": "EconomicProduction", + "label": "economic production" + }, + "measured_property": { + "ref": "valueAdded", + "label": "value added" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 2, + "member_digest": "ef9c4356618ed98aab762248e68799d78c74ad249a6041dad0e8a345c85ee02f", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "currencyConversionBasis" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1980", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 92, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 46 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 92, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1980, + "end_year": 2025 + }, + "licence": { + "label": "IMF Copyright and Usage" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + }, + "unit": { + "basis": "bound", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PurchasingPowerParityRate", + "label": "purchasing power parity rate" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_4535d09baf2bdffef7c19c7796e96687", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS). GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators. You named Germany as a provider. This measure has no providers, so this shows the place itself. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": "You named Germany as a provider. This measure has no providers, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "ee49afa94b0440c9b557ce3413d538a5" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ], + "state": "set" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/KEN" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_d6ce435ea267b46680c94eae9423d420", + "prepared_at": "2026-10-21T13:05:29Z", + "coverage": { + "rows": 512, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 28 + } + ], + "window": { + "kind": "all", + "start_year": 1997, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1997, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 10 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 18 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 10 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 13 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 11 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 14 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 12 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 11 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11232_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 19 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12340_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 19 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12382_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 9 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 12 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB031_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB031_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB03_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB03_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB04_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB04_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB04_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11231_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11260_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12262_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12263_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12310_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12350_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11130_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11330_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12181_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12250_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12261_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12281_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance422_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11320_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode11430_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode12230_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode11420_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12110_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12182_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance610_CRSCooperationModalityC01_CRSPurposeCode12240_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "family_member_count": 545, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:29.417660+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 16150, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:29.374895+00:00", + "tier": "working", + "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d" + }, + { + "artifact_digest": "sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179", + "rendering": { + "statistics": "series" + }, + "bytes": 11612, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:29.374895+00:00", + "tier": "working", + "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179" + } + ], + "series_count": 108, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 108 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 28 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 29, + "cells": 3132 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 109, + "cells": 3052 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:29.374859Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d?X-Goog-Signature=redacted", + "x-dfo-trace-id": "cee84dbe25214a0f8ea3f0a28ce10adc" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A20de1920cc7d185366a8ef7120e53b8189b34cc22d8a10a414194ecd9cb32d8d?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "c3f031f1d3724d2ea9b19e58197e4f03" + }, + "body_file": "answer-several-readings-folded.parquet" + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "definition": { + "schema_version": 1, + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e043b83fa1f8472e814c68afde278ab8" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "EconomicActivity", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "GrossDomesticProduction", + "state": "value" + }, + "property": "activitySource" + }, + { + "binding": { + "state": "unbound" + }, + "property": "economicSector" + }, + { + "binding": { + "state": "unbound" + }, + "property": "naics" + }, + { + "binding": { + "state": "unbound" + }, + "property": "schoolGradeLevel" + } + ], + "facets": { + "unit": { + "ref": "USDollar", + "state": "value" + } + }, + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_91f57bfc5bbc5f09983596996238787d", + "prepared_at": "2026-10-21T13:05:30Z", + "coverage": { + "rows": 132, + "dimensions": [ + { + "label": "observationAbout", + "count": 2 + }, + { + "label": "years", + "count": 66 + } + ], + "window": { + "kind": "all", + "start_year": 1960, + "end_year": 2025, + "origin": "default" + } + }, + "citation": { + "text": "World Development Indicators (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "license": "Creative Commons Attribution License", + "license_type": "CreativeCommonsAttributionLicense", + "license_url": "https://datacatalog.worldbank.org/search/dataset/0037712", + "url": "https://datatopics.worldbank.org/world-development-indicators/", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": { + "publisher": "World Bank", + "description": "The primary World Bank collection of development indicators encompassing global economic and social data.", + "source_data_url": "http://api.worldbank.org/v2/en/country/AFG?downloadformat=csv", + "update_cadence": "Monthly", + "last_update": "2026-10-13", + "currencies": [], + "transformation_log": [], + "version_history": [] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1960, + "end_year": 2025, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "dc/base/WorldDevelopmentIndicators", + "revision": "2026-10-13" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_EconomicActivity_GrossDomesticProduction_Nominal", + "roles": [ + "observationAbout" + ], + "observation_count": 132 + } + ], + "family_member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "family_member_count": 65, + "facets": [ + { + "axis": "provenance", + "ref": "dc/base/WorldDevelopmentIndicators", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "8535402560764839853" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "8535402560764839853" + }, + { + "axis": "unit", + "ref": "USDollar", + "basis": "bound", + "default_policy": null, + "default_policy_version": null, + "selection_reason": null, + "dispatch_facet_id": "8535402560764839853" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:30.811140+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 6545, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:30.778158+00:00", + "tier": "working", + "url": "/api/datasets/spec_f8dea3052d1ef6ba5667628815d1a663/cv_91f57bfc5bbc5f09983596996238787d/files/sha256:9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839" + }, + { + "artifact_digest": "sha256:8eecb62c1741271464d6d66841353d96f7e36aa9c3915f7948ea7c78c7dbc9e7", + "rendering": { + "statistics": "series" + }, + "bytes": 5379, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:30.778158+00:00", + "tier": "working", + "url": "/api/datasets/spec_f8dea3052d1ef6ba5667628815d1a663/cv_91f57bfc5bbc5f09983596996238787d/files/sha256:8eecb62c1741271464d6d66841353d96f7e36aa9c3915f7948ea7c78c7dbc9e7" + } + ], + "series_count": 2, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "observationAbout", + "kind": "role", + "droppable": false, + "distinct": 2 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 66 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "observationAbout", + "field": "iso3", + "token": "observationAbout_iso3", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "iso2", + "token": "observationAbout_iso2", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "label", + "token": "observationAbout_label", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "type", + "token": "observationAbout_type", + "state": "available", + "coverage": { + "entities": 2, + "covered": 2 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "observationAbout_label" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "observationAbout", + "columns": "time_period", + "state": "available", + "width": 67, + "cells": 134 + }, + { + "index": "time_period", + "columns": "observationAbout", + "state": "available", + "width": 3, + "cells": 198 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:30.778009Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_f8dea3052d1ef6ba5667628815d1a663/cv_91f57bfc5bbc5f09983596996238787d/files/sha256:9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted", + "x-dfo-trace-id": "8bf21c550f584bcaa21bcb8d69498a7d" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "8072bc19c0fc4a5aa825d37c5956317c" + }, + "body_file": "answer-several-readings-folded-2.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS). GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators. You named Germany as a provider. This measure has no providers, so this shows the place itself. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "complete": true, + "specs": [ + "spec_25f482395c5d012ec278118f38dff29c", + "spec_f8dea3052d1ef6ba5667628815d1a663" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 644, + "columns": [ + "part", + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label", + "stat_var_label", + "observationAbout", + "observationAbout_label" + ], + "part_rows": [ + { + "part": "ODA disbursements for health; ODA disbursements for education", + "rows": 512 + }, + { + "part": "GDP", + "rows": 132 + } + ], + "complete": true, + "members": [ + { + "parts": [ + "ODA disbursements for health", + "ODA disbursements for education" + ], + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "content_version": "cv_d6ce435ea267b46680c94eae9423d420", + "sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + { + "parts": [ + "GDP" + ], + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "content_version": "cv_91f57bfc5bbc5f09983596996238787d", + "sentence": "GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators." + } + ], + "missing": [], + "search_warning": true + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.parquet b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.parquet new file mode 100644 index 0000000..b05bcc7 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/answer-several-readings-folded.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-identity.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-identity.json new file mode 100644 index 0000000..a449a5d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-identity.json @@ -0,0 +1,3624 @@ +{ + "format_version": 1, + "name": "answer-spec-without-identity", + "description": "A Search spec whose definition has no identity, which a client posts back, raises ContractError contract_violation.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "Part 0's spec definition loses identity, and the fetch goes." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e" + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-resolved.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-resolved.json new file mode 100644 index 0000000..eb08965 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-spec-without-resolved.json @@ -0,0 +1,404 @@ +{ + "format_version": 1, + "name": "answer-spec-without-resolved", + "description": "A Search spec with no resolved, whose entity_groups a client reads, raises ContractError contract_violation.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "Part 0's spec loses resolved, and the fetch goes." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-timed-out.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-timed-out.json new file mode 100644 index 0000000..3afa337 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-timed-out.json @@ -0,0 +1,3632 @@ +{ + "format_version": 1, + "name": "answer-timed-out", + "description": "A no_data part of an answer whose diagnostics say Search timed out is a timed_out gap, whatever its reason, and fetching the answer raises IncompleteAnswerError, which describes the answer and carries its response's trace id.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-mixed-fetch-raises", + "edit": "The answer's diagnostics.timed_out becomes true, and its response carries x-dfo-trace-id 55555555555555555555555555555555." + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "55555555555555555555555555555555" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1", + "warnings": [], + "timing_ms": { + "total": 4692, + "by_step": { + "coverage": 0, + "extract": 1001 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 860 + }, + "timed_out": true + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 3475, + "by_step": { + "recall": 434, + "shape_arcs": 3, + "shape_probe_coverage": 4, + "shape_probe": 243, + "shape_groups": 3, + "shape_labels": 9, + "shape_admission": 0, + "shape": 893, + "bind": 1563, + "materialise": 9, + "answer": 381, + "options": 195 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 574, + "by_step": { + "recall": 380, + "shape_arcs": 1, + "shape_probe": 190, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 0, + "shape": 194 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "variable_not_resolved", + "category": "unresolved", + "message": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "complete": false, + "specs": [ + "spec_78d04fefc3b3f1ef71acd622957e4995" + ], + "gaps": [ + { + "part": 1, + "kind": "timed_out", + "options": 0 + } + ] + } + }, + { + "error": { + "class": "IncompleteAnswerError", + "code": "answer_incomplete", + "trace_id": "55555555555555555555555555555555" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-enum-value.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-enum-value.json new file mode 100644 index 0000000..5c8c6b2 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-enum-value.json @@ -0,0 +1,257 @@ +{ + "format_version": 1, + "name": "answer-unknown-enum-value", + "description": "An enum value the client does not know passes through untouched and changes no outcome.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The no_data part's category becomes \"undetermined\", a value the served enum lacks." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "undetermined", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-kind.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-kind.json new file mode 100644 index 0000000..2c609b2 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-kind.json @@ -0,0 +1,248 @@ +{ + "format_version": 1, + "name": "answer-unknown-kind", + "description": "A search response whose kind the client does not know raises ContractError, since the client cannot read the answer.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The answer's kind becomes \"verdict\", a kind no client knows." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "verdict", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-part-status.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-part-status.json new file mode 100644 index 0000000..c3fac94 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unknown-part-status.json @@ -0,0 +1,3632 @@ +{ + "format_version": 1, + "name": "answer-unknown-part-status", + "description": "A part status the client does not know parses as an unknown part, counts as an unknown gap with no options, and makes fetching the answer raise IncompleteAnswerError.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-mixed-fetch-raises", + "edit": "Part 1's status becomes \"deferred\", a status no client knows." + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3b0a506d6d2a43a0becd94837bafffa1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1", + "warnings": [], + "timing_ms": { + "total": 4692, + "by_step": { + "coverage": 0, + "extract": 1001 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 3475, + "by_step": { + "recall": 434, + "shape_arcs": 3, + "shape_probe_coverage": 4, + "shape_probe": 243, + "shape_groups": 3, + "shape_labels": 9, + "shape_admission": 0, + "shape": 893, + "bind": 1563, + "materialise": 9, + "answer": 381, + "options": 195 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 574, + "by_step": { + "recall": 380, + "shape_arcs": 1, + "shape_probe": 190, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 0, + "shape": 194 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "deferred", + "no_data": { + "reason": "variable_not_resolved", + "category": "unresolved", + "message": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "complete": false, + "specs": [ + "spec_78d04fefc3b3f1ef71acd622957e4995" + ], + "gaps": [ + { + "part": 1, + "kind": "unknown", + "options": 0 + } + ] + } + }, + { + "error": { + "class": "IncompleteAnswerError", + "code": "answer_incomplete", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/answer-unsupported-part.json b/python/client-contract/src/dfo_client_contract/scenarios/answer-unsupported-part.json new file mode 100644 index 0000000..8fc9421 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-unsupported-part.json @@ -0,0 +1,3626 @@ +{ + "format_version": 1, + "name": "answer-unsupported-part", + "description": "An unsupported part is an unsupported gap with no options, and fetching the answer raises IncompleteAnswerError.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-mixed-fetch-raises", + "edit": "Part 1 becomes an unsupported part with code scope_too_broad." + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3b0a506d6d2a43a0becd94837bafffa1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1", + "warnings": [], + "timing_ms": { + "total": 4692, + "by_step": { + "coverage": 0, + "extract": 1001 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 3475, + "by_step": { + "recall": 434, + "shape_arcs": 3, + "shape_probe_coverage": 4, + "shape_probe": 243, + "shape_groups": 3, + "shape_labels": 9, + "shape_admission": 0, + "shape": 893, + "bind": 1563, + "materialise": 9, + "answer": 381, + "options": 195 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 574, + "by_step": { + "recall": 380, + "shape_arcs": 1, + "shape_probe": 190, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 0, + "shape": 194 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "unsupported", + "unsupported": { + "code": "scope_too_broad", + "pointer": "/definition/identity", + "detail": "the family is too broad to settle; bind a what or how slot" + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "complete": false, + "specs": [ + "spec_78d04fefc3b3f1ef71acd622957e4995" + ], + "gaps": [ + { + "part": 1, + "kind": "unsupported", + "options": 0 + } + ] + } + }, + { + "error": { + "class": "IncompleteAnswerError", + "code": "answer_incomplete", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-assumed-reading.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-assumed-reading.json new file mode 100644 index 0000000..0a7a407 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-assumed-reading.json @@ -0,0 +1,3192 @@ +{ + "format_version": 1, + "name": "choose-candidate-assumed-reading", + "description": "Picking a candidate whose reading_assumptions entry holds an assumption posts that list unchanged as the identity entry's assumptions. The picked answer's assumptions and its sentence, closed by the assumption clause (\"Assumed: official development assistance.\"), are Search's response, which the client takes as it stands.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-candidates-choose-fetch", + "edit": "The picked reading's reading_assumptions entry holds one declared default, the pick echoes it, Search's answer states it, and the fetch goes." + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022" + }, + { + "op": "choose", + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d107dd88e50147378d54464bcdaf9695" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022", + "normalized_query": "GNI of Germany from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d107dd88e50147378d54464bcdaf9695", + "warnings": [], + "timing_ms": { + "total": 4075, + "by_step": { + "coverage": 0, + "extract": 1004 + } + }, + "llm_usage": { + "input_tokens": 7300, + "output_tokens": 300, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2799, + "by_step": { + "recall": 381, + "shape_arcs": 2, + "shape_probe_coverage": 1, + "shape_probe": 203, + "shape_groups": 18, + "shape_labels": 5, + "shape_admission": 0, + "shape": 1186, + "bind": 829, + "materialise": 217, + "answer": 186 + } + }, + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "definition": { + "schema_version": 1, + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "definition": { + "schema_version": 1, + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity per capita in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_c0f61f3ca3558aac184973441a67601e": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "spec_403a96317ee8b97f1d8569c71015e5ce": [], + "spec_d94656e5d53b7b6c6b0c683145a1cd98": [] + } + } + ], + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "candidates" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "variable_text": "GNI" + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4386e87708a64f078f39a795faeb0100" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4386e87708a64f078f39a795faeb0100", + "warnings": [], + "timing_ms": { + "total": 9, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 8, + "by_step": { + "validate": 0, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 1, + "materialise": 0, + "answer": 1, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1. Assumed: official development assistance.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "official development assistance", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "candidates", + "sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1. Assumed: official development assistance.", + "complete": true, + "specs": [ + "spec_c0f61f3ca3558aac184973441a67601e" + ], + "gaps": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-by-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-by-label.json new file mode 100644 index 0000000..8cab458 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-by-label.json @@ -0,0 +1,3133 @@ +{ + "format_version": 1, + "name": "choose-candidate-by-label", + "description": "A candidate is chosen by its label, the heading of its sentence plan, as by its index: the choice posts the same identity entry and reaches the same answer.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-candidates-choose-fetch", + "edit": "The choice names candidate 0 by its label." + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022" + }, + { + "op": "choose", + "option": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022." + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d107dd88e50147378d54464bcdaf9695" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022", + "normalized_query": "GNI of Germany from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d107dd88e50147378d54464bcdaf9695", + "warnings": [], + "timing_ms": { + "total": 4075, + "by_step": { + "coverage": 0, + "extract": 1004 + } + }, + "llm_usage": { + "input_tokens": 7300, + "output_tokens": 300, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2799, + "by_step": { + "recall": 381, + "shape_arcs": 2, + "shape_probe_coverage": 1, + "shape_probe": 203, + "shape_groups": 18, + "shape_labels": 5, + "shape_admission": 0, + "shape": 1186, + "bind": 829, + "materialise": 217, + "answer": 186 + } + }, + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "definition": { + "schema_version": 1, + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "definition": { + "schema_version": 1, + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity per capita in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_c0f61f3ca3558aac184973441a67601e": [], + "spec_403a96317ee8b97f1d8569c71015e5ce": [], + "spec_d94656e5d53b7b6c6b0c683145a1cd98": [] + } + } + ], + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "candidates" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [], + "variable_text": "GNI" + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4386e87708a64f078f39a795faeb0100" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4386e87708a64f078f39a795faeb0100", + "warnings": [], + "timing_ms": { + "total": 9, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 8, + "by_step": { + "validate": 0, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 1, + "materialise": 0, + "answer": 1, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "candidates", + "sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "complete": true, + "specs": [ + "spec_c0f61f3ca3558aac184973441a67601e" + ], + "gaps": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-echoes-assumptions.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-echoes-assumptions.json new file mode 100644 index 0000000..6c18b3a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-echoes-assumptions.json @@ -0,0 +1,8992 @@ +{ + "format_version": 1, + "name": "choose-candidate-echoes-assumptions", + "description": "Choosing candidate 0 on part 0 beside a definite part that states assumptions posts each identity entry with its reading's assumptions echoed: the chosen candidate's reading_assumptions entry, [] here, and the definite part's own assumptions. The rebuilt definite part states the same assumptions; an entry with no assumptions would be read as a fresh request.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:07:25Z" + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany and aid flows to Kenya" + }, + { + "op": "choose", + "part": 0, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany and aid flows to Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "810e4170976b4e69aade88273e59e8c2" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany and aid flows to Kenya", + "normalized_query": "GNI of Germany and aid flows to Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "810e4170976b4e69aade88273e59e8c2", + "warnings": [], + "timing_ms": { + "total": 3563, + "by_step": { + "coverage": 0, + "extract": 915 + } + }, + "llm_usage": { + "input_tokens": 11874, + "output_tokens": 489, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [ + { + "code": "direction_discarded", + "severity": "warn", + "message": "Kenya was named as the recipient; this shape reports the place as its own subject, so the direction was dropped." + } + ], + "timing_ms": { + "total": 2206, + "by_step": { + "recall": 1, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 270, + "shape_groups": 201, + "shape_labels": 6, + "shape_admission": 0, + "shape": 1165, + "bind": 1038, + "materialise": 1, + "answer": 1 + } + }, + "rendered_sentence": "2 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 1960 to 2025 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 1990 to 2025. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "sentence_plan": [ + { + "kind": "text", + "text": "2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "1960 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "1990 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Kenya", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself." + } + ], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "definition": { + "schema_version": 1, + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 66, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 66, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_c024875e07eee23ed7cb8d18b4436df1", + "definition": { + "schema_version": 1, + "spec_id": "spec_c024875e07eee23ed7cb8d18b4436df1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1990", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 72, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 36 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 72, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1990, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity in international dollars in Germany and Kenya, 1990 to 2025. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1990 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_f0d0bb4841c0e55d6d4a353e45dcd52c": [], + "spec_c024875e07eee23ed7cb8d18b4436df1": [] + } + }, + { + "variable_text": "aid flows", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "slot_defaulted", + "severity": "warn", + "message": "No aid type was named, so the answer covers official development assistance." + } + ], + "timing_ms": { + "total": 2564, + "by_step": { + "recall": 607, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 218, + "shape_groups": 18, + "shape_labels": 0, + "shape_admission": 0, + "shape": 930, + "bind": 1014, + "materialise": 6, + "answer": 4, + "options": 3 + } + }, + "restatement": { + "variable_text": "aid flows", + "entities": [ + { + "text": "Germany" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "closest_match", + "asked": "aid flows", + "shown": "gross disbursements", + "text": "You asked for aid flows. This shows gross disbursements, the closest measure the data holds." + }, + { + "code": "direction_inferred", + "binding_ref": "where:", + "asked": "Germany", + "text": "You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider." + } + ], + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "definition": { + "schema_version": 1, + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 65, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 65, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 61, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 65, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 59, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 44, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 29, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "declared_default" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_433a5ca3b9aa482f8f332201570ef664", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 65, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GNI has 2 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 1960 to 2025 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 1990 to 2025. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider. Assumed: official development assistance.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GNI", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " has 2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "1960 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "1990 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "You asked for aid flows. This shows gross disbursements, the closest measure the data holds.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "official development assistance", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + }, + "assumptions": [], + "variable_text": "GNI" + }, + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + }, + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "variable_text": "aid flows" + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "2e151fcdeb6f40b3be7b3da99c277765" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "2e151fcdeb6f40b3be7b3da99c277765", + "warnings": [], + "timing_ms": { + "total": 947, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 1, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 0, + "materialise": 0, + "answer": 1, + "options": 0 + } + }, + "operations": [], + "departures": [ + { + "code": "entity_unavailable", + "binding_ref": "where:", + "text": "You asked for Kenya. The data holds no values for it." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "definition": { + "schema_version": 1, + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 66, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 66, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + }, + { + "variable_text": "aid flows", + "warnings": [], + "timing_ms": { + "total": 924, + "by_step": { + "validate": 0, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 909, + "bind": 0, + "where_places": 0, + "materialise": 4, + "answer": 5, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "definition": { + "schema_version": 1, + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 65, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 65, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 61, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 65, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 59, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 44, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 29, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_433a5ca3b9aa482f8f332201570ef664", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 65, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. Assumed: official development assistance.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for Kenya. The data holds no values for it.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "official development assistance", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GNI has 2 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 1960 to 2025 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 1990 to 2025. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider. Assumed: official development assistance.", + "complete": false, + "specs": [ + "spec_473682ae7e62be173cac86a13815f0fa" + ], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. Assumed: official development assistance.", + "complete": true, + "specs": [ + "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "spec_473682ae7e62be173cac86a13815f0fa" + ], + "gaps": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts-2.parquet b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts-2.parquet new file mode 100644 index 0000000..b4448d0 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts-2.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.json new file mode 100644 index 0000000..951784d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.json @@ -0,0 +1,17740 @@ +{ + "format_version": 1, + "name": "choose-candidate-two-parts", + "description": "Choosing candidate 0 on the candidates part of a two-part answer posts dataset_resubmit with one entry per part in part order: the chosen candidate's identity, and the definite part's identity with its entity_groups. Both parts answer definite, and the fetch stacks two members with each member's parts as its part column value.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:07:05Z" + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022, and ODA disbursements from Germany to sub-Saharan Africa" + }, + { + "op": "choose", + "part": 0, + "option": 0 + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022, and ODA disbursements from Germany to sub-Saharan Africa" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "a9c284c85fd74d4283998be9c492aab4" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022, and ODA disbursements from Germany to sub-Saharan Africa", + "normalized_query": "GNI of Germany from 2015 to 2022, and ODA disbursements from Germany to sub-Saharan Africa", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "a9c284c85fd74d4283998be9c492aab4", + "warnings": [], + "timing_ms": { + "total": 4415, + "by_step": { + "coverage": 0, + "extract": 1049 + } + }, + "llm_usage": { + "input_tokens": 11567, + "output_tokens": 611, + "cached_tokens": 864 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [ + { + "code": "direction_discarded", + "severity": "warn", + "message": "sub-Saharan Africa was named as the recipient; this shape reports the place as its own subject, so the direction was dropped." + }, + { + "code": "direction_discarded", + "severity": "warn", + "message": "Germany was named as the provider; this shape reports the place as its own subject, so the direction was dropped." + } + ], + "timing_ms": { + "total": 2710, + "by_step": { + "recall": 0, + "shape_arcs": 2, + "shape_probe_coverage": 3, + "shape_probe": 4, + "shape_groups": 18, + "shape_labels": 7, + "shape_admission": 562, + "shape": 1553, + "bind": 893, + "materialise": 246, + "answer": 18 + } + }, + "rendered_sentence": "3 readings. Primary income for gross of fixed capital consumption in 49 places. World Bank International Debt Statistics (IDS) · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in 49 places. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in 49 places. World Development Indicators · 2015 to 2022. You named sub-Saharan Africa as a recipient. This measure has no recipients, so this shows the place itself.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "49 places", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "49 places", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "49 places", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "You named sub-Saharan Africa as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "sub-Saharan Africa", + "role_text": "to" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "sub-Saharan Africa", + "text": "You named sub-Saharan Africa as a recipient. This measure has no recipients, so this shows the place itself." + } + ], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "definition": { + "schema_version": 1, + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DEU", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 348, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 44 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 348, + "rows_exact": true, + "series": 44, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in 49 places, 2015 to 2022. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "49 places", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_07c78f9c1c511ed05a0f700b7f6c121e", + "definition": { + "schema_version": 1, + "spec_id": "spec_07c78f9c1c511ed05a0f700b7f6c121e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DEU", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 377, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 377, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity in international dollars in 49 places, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "49 places", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_62eeede92636290b4c10e207bd8bffbb", + "definition": { + "schema_version": 1, + "spec_id": "spec_62eeede92636290b4c10e207bd8bffbb", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DEU", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 377, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 377, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity per capita in international dollars in 49 places, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "49 places", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_bc87ff8e0f29960c38c96a4f4d2b0e20": [], + "spec_07c78f9c1c511ed05a0f700b7f6c121e": [], + "spec_62eeede92636290b4c10e207bd8bffbb": [] + } + }, + { + "variable_text": "ODA disbursements", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 2250, + "by_step": { + "recall": 0, + "shape_arcs": 0, + "shape_probe_coverage": 3, + "shape_probe": 3, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 431, + "shape": 1214, + "bind": 1016, + "materialise": 10, + "answer": 7, + "options": 3 + } + }, + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "sub-Saharan Africa", + "role_text": "to" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "asked": "sub-Saharan Africa", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "definition": { + "schema_version": 1, + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "destination": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 372, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "headline": { + "year": 2022, + "year_named": true, + "named_window": { + "start_year": 2015, + "end_year": 2022 + }, + "observations": 46, + "series": 46, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 46 + }, + "recent_years": [ + { + "year": 2022, + "observations": 46, + "series": 46, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 46 + } + }, + { + "year": 2021, + "observations": 46, + "series": 46, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 46 + } + }, + { + "year": 2020, + "observations": 47, + "series": 47, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 47 + } + } + ] + }, + "download": { + "rows": 372, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 68, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 372, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 372, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 129, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 188, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to the 48 countries in Sub-Saharan Africa for official development assistance, 2015 to 2022. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "slot": "dac2aAidType", + "disposition": "bound", + "selected": [] + } + ], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_f936496b58a844fc044d98a4255f48f2", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 372, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 2015, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2015, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 2015, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2020, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2015, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2018, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2018, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GNI has 3 readings. Primary income for gross of fixed capital consumption in 49 places. World Bank International Debt Statistics (IDS) · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in 49 places. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in 49 places. World Development Indicators · 2015 to 2022. You named sub-Saharan Africa as a recipient. This measure has no recipients, so this shows the place itself. Germany's gross disbursements to the 48 countries in Sub-Saharan Africa for official development assistance, 2015 to 2022. Current US dollars · OECD DAC2a. You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GNI", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " has 3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "49 places", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "49 places", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "49 places", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You named sub-Saharan Africa as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "where:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DEU", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [], + "variable_text": "GNI" + }, + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "entity_groups": { + "destination": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "assumptions": [], + "variable_text": "ODA disbursements" + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "ab49f41a7e8a4bd3a52698f3b699ebfa" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "ab49f41a7e8a4bd3a52698f3b699ebfa", + "warnings": [], + "timing_ms": { + "total": 1163, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 8, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 0, + "materialise": 4, + "answer": 3, + "options": 1 + } + }, + "operations": [], + "departures": [ + { + "code": "entity_unavailable", + "binding_ref": "where:", + "text": "You asked for Germany, Eritrea, Namibia, South Sudan, and Seychelles. The data holds no values for them." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "definition": { + "schema_version": 1, + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DEU", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 348, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 44 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 348, + "rows_exact": true, + "series": 44, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in 49 places, 2015 to 2022. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "49 places", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + }, + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 946, + "by_step": { + "validate": 0, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 922, + "bind": 0, + "where_places": 0, + "materialise": 11, + "answer": 7, + "options": 1 + } + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "definition": { + "schema_version": 1, + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "destination": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 372, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "headline": { + "year": 2022, + "year_named": true, + "named_window": { + "start_year": 2015, + "end_year": 2022 + }, + "observations": 46, + "series": 46, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 46 + }, + "recent_years": [ + { + "year": 2022, + "observations": 46, + "series": 46, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 46 + } + }, + { + "year": 2021, + "observations": 46, + "series": 46, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 46 + } + }, + { + "year": 2020, + "observations": 47, + "series": 47, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 47 + } + } + ] + }, + "download": { + "rows": 372, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 68, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 372, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 372, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 129, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 188, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to the 48 countries in Sub-Saharan Africa for official development assistance, 2015 to 2022. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_f936496b58a844fc044d98a4255f48f2", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 372, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 2015, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2015, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 2015, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2020, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2015, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2018, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2018, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2015, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2015, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in 49 places, 2015 to 2022. Current US dollars · World Bank International Debt Statistics (IDS). You asked for Germany, Eritrea, Namibia, South Sudan, and Seychelles. The data holds no values for them. Germany's gross disbursements to the 48 countries in Sub-Saharan Africa for official development assistance, 2015 to 2022. Current US dollars · OECD DAC2a. This shows the 48 countries in Sub-Saharan Africa, each on its own.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "49 places", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for Germany, Eritrea, Namibia, South Sudan, and Seychelles. The data holds no values for them.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "where:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "definition": { + "schema_version": 1, + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DEU", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "66f7b92c09b04f4eb11b0cf7c976f2be" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "GrossOfFixedCapitalConsumption", + "state": "value" + }, + "property": "fixedCapitalConsumptionBasis" + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DEU", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2022, + "start_year": 2015 + } + } + }, + "content_version": "cv_18a63cb9e24a4ce6dfcd1c60f0c5a470", + "prepared_at": "2026-10-21T13:07:13Z", + "coverage": { + "rows": 348, + "dimensions": [ + { + "label": "observationAbout", + "count": 44 + }, + { + "label": "years", + "count": 8 + } + ], + "window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022, + "origin": "query" + } + }, + "citation": { + "text": "World Bank International Debt Statistics (IDS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "license": "Creative Commons Attribution License", + "license_type": "CreativeCommonsAttributionLicense", + "license_url": "https://datacatalog.worldbank.org/public-licenses?fragment=cc", + "url": "https://datacatalog.worldbank.org/search/dataset/0038015/international-debt-statistics", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "World Bank", + "description": "International Debt Statistics (IDS) is the World Bank's annual dataset on the external debt of low- and middle-income countries. It reports debt stocks, disbursements, debt service and projected repayments by borrower and creditor type, with public and publicly guaranteed debt broken down by creditor, from 1970 onwards. The data come mainly from countries' loan-by-loan reporting of public and publicly guaranteed debt to the World Bank's Debtor Reporting System, which is a condition of borrowing from IBRD and IDA.", + "source_data_url": "https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092201/A_D.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092202/E_K.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092203/L_M.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0093225/N_Q.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092204/R_U.xlsx,https://datacatalogfiles.worldbank.org/ddh-published/0038015/DR0092205/V_Z.xlsx", + "attribution": "International Debt Statistics by the World Bank, https://datacatalog.worldbank.org/search/dataset/0038015/international-debt-statistics, licensed under CC BY 4.0. Modified by The ONE Campaign.", + "update_cadence": "Annual", + "last_update": "2026-10-13", + "years_covered": "1970-2032", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The World Bank publishes IDS as six bulk files, split by debtor name. All six are downloaded each time the pipeline runs, and replace the previous copy, so the data reflects the World Bank's latest release." + }, + { + "transformation": "Exclude series outside the debt statistics", + "description": "Non-debt statistics are excluded, including population, balance of payments, investment and reserves. GNI is kept, because some debt ratios are shares of it. Exports of goods, services and primary income, and the three debt ratios that are shares of it, are excluded until the ontology can describe them. Debt forgiveness grants, the stock-flow reconciliation residual, the annual changes in debt stocks and interest arrears, and the present value of debt are also excluded." + }, + { + "transformation": "Omit zeros where no lending took place", + "description": "IDS reports a value for every debtor, creditor and series, including pairs with no lending between them, so most figures are zero. Zeros are kept on world totals, and within or after a period of lending between a debtor and a creditor. They are omitted where a creditor has not lent to a debtor, for the years before lending began, and for averages in years with no new commitments, since there is nothing to average." + }, + { + "transformation": "Standardise debtors and creditors", + "description": "Debtor and creditor codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. Where a series names a single lender in its code, such as debt owed to the IBRD, that lender becomes the creditor." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the debtor and the creditor, and the dimensions the World Bank encodes in each series code, such as type of flow, maturity and creditor type. GNI is the exception: it describes the debtor economy, so it is reported against the year and the economy alone. Ratios record what they are a share of: GNI or total external debt stocks. Every amount is reported in US dollars at current prices." + }, + { + "transformation": "Mark projections as estimated", + "description": "For the years after the last reported year, the World Bank projects debt service and disbursements on commitments already made. These values are marked as estimated, so they are kept apart from reported values." + } + ], + "version_history": [ + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "External debt stocks, flows and debt service of low- and middle-income countries by borrower and creditor, with related ratios and gross national income." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022, + "origin": "query" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/WorldBankInternationalDebtStatistics", + "revision": "2026-10-13" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:PrimaryIncome_EconomicUnit_GrossOfFixedCapitalConsumption_Nominal", + "roles": [ + "observationAbout" + ], + "observation_count": 348 + } + ], + "family_member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "family_member_count": 1, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "most_observations_over_disagreement", + "dispatch_facet_id": "2052749850102211920" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "2052749850102211920" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "most_observations", + "dispatch_facet_id": "2052749850102211920" + } + ], + "normalisations": [], + "choices": [ + { + "axis": "provenance", + "candidates": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "places": 44, + "years": 8, + "observations": 2249 + }, + { + "ref": "provenance/OECDDAC1", + "places": 1, + "years": 8, + "observations": 66 + } + ] + } + ], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:07:13.393388+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for country/DEU, country/ERI, country/NAM, country/SSD, country/SYC." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:05184087a3031ed02bb45806f4a6c134b580ace5cada64878fca2aaa75acdb91", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9453, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:07:13.365418+00:00", + "tier": "working", + "url": "/api/datasets/spec_bc87ff8e0f29960c38c96a4f4d2b0e20/cv_18a63cb9e24a4ce6dfcd1c60f0c5a470/files/sha256:05184087a3031ed02bb45806f4a6c134b580ace5cada64878fca2aaa75acdb91" + }, + { + "artifact_digest": "sha256:9f6cef75c54026bc957665229b19adb252d00d61f542483166394fa4aa273370", + "rendering": { + "statistics": "series" + }, + "bytes": 8146, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:07:13.365418+00:00", + "tier": "working", + "url": "/api/datasets/spec_bc87ff8e0f29960c38c96a4f4d2b0e20/cv_18a63cb9e24a4ce6dfcd1c60f0c5a470/files/sha256:9f6cef75c54026bc957665229b19adb252d00d61f542483166394fa4aa273370" + } + ], + "series_count": 44, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "observationAbout", + "kind": "role", + "droppable": false, + "distinct": 44 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 8 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "observationAbout", + "field": "iso3", + "token": "observationAbout_iso3", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "iso2", + "token": "observationAbout_iso2", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "label", + "token": "observationAbout_label", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + }, + { + "column": "observationAbout", + "field": "type", + "token": "observationAbout_type", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "observationAbout_label" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "observationAbout", + "columns": "time_period", + "state": "available", + "width": 9, + "cells": 396 + }, + { + "index": "time_period", + "columns": "observationAbout", + "state": "available", + "width": 45, + "cells": 360 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:07:13.365465Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_bc87ff8e0f29960c38c96a4f4d2b0e20/cv_18a63cb9e24a4ce6dfcd1c60f0c5a470/files/sha256:05184087a3031ed02bb45806f4a6c134b580ace5cada64878fca2aaa75acdb91" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A05184087a3031ed02bb45806f4a6c134b580ace5cada64878fca2aaa75acdb91?X-Goog-Signature=redacted", + "x-dfo-trace-id": "6ae6fbcb32de433b9c930ccae2a93638" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A05184087a3031ed02bb45806f4a6c134b580ace5cada64878fca2aaa75acdb91?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "62a06033b1da44e49a59a3cb04d69bab" + }, + "body_file": "choose-candidate-two-parts.parquet" + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "definition": { + "schema_version": 1, + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "59c41cc22b2c48969e22aa99e323d935" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2022, + "start_year": 2015 + } + } + }, + "content_version": "cv_9362a741d742d00a0f4f5d671e0b400c", + "prepared_at": "2026-10-21T13:07:14Z", + "coverage": { + "rows": 372, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 48, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 8 + } + ], + "window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022, + "origin": "query" + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022, + "origin": "query" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 372 + } + ], + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_count": 1, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDDAC2A", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:07:14.106516+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:8fd31163adf485e022515e99d523bd1b93a1274726800598df8583981bc0984d", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 10503, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:07:14.069922+00:00", + "tier": "working", + "url": "/api/datasets/spec_941030940d23f46826acaa0c6fed8bbc/cv_9362a741d742d00a0f4f5d671e0b400c/files/sha256:8fd31163adf485e022515e99d523bd1b93a1274726800598df8583981bc0984d" + }, + { + "artifact_digest": "sha256:27b4eefb8edbb7ed613cf134d8df4fba5dfeab885ed8c2f210c26e35032df8bc", + "rendering": { + "statistics": "series" + }, + "bytes": 8083, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:07:14.069922+00:00", + "tier": "working", + "url": "/api/datasets/spec_941030940d23f46826acaa0c6fed8bbc/cv_9362a741d742d00a0f4f5d671e0b400c/files/sha256:27b4eefb8edbb7ed613cf134d8df4fba5dfeab885ed8c2f210c26e35032df8bc" + } + ], + "series_count": 48, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 48 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 8 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 48, + "covered": 48 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 48, + "covered": 47 + }, + "missing": [ + { + "ref": "country/SSD", + "label": "South Sudan" + } + ], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 48, + "covered": 48 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 48, + "covered": 48 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 48, + "covered": 48 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingRecipient", + "columns": "time_period", + "state": "available", + "width": 9, + "cells": 432 + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "available", + "width": 49, + "cells": 392 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:07:14.070133Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_941030940d23f46826acaa0c6fed8bbc/cv_9362a741d742d00a0f4f5d671e0b400c/files/sha256:8fd31163adf485e022515e99d523bd1b93a1274726800598df8583981bc0984d" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A8fd31163adf485e022515e99d523bd1b93a1274726800598df8583981bc0984d?X-Goog-Signature=redacted", + "x-dfo-trace-id": "179d8bf5dffb4f048480c624923bd736" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A8fd31163adf485e022515e99d523bd1b93a1274726800598df8583981bc0984d?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "51d43205f7bd45fb84ad04cf2c329a6d" + }, + "body_file": "choose-candidate-two-parts-2.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GNI has 3 readings. Primary income for gross of fixed capital consumption in 49 places. World Bank International Debt Statistics (IDS) · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in 49 places. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in 49 places. World Development Indicators · 2015 to 2022. You named sub-Saharan Africa as a recipient. This measure has no recipients, so this shows the place itself. Germany's gross disbursements to the 48 countries in Sub-Saharan Africa for official development assistance, 2015 to 2022. Current US dollars · OECD DAC2a. You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "complete": false, + "specs": [ + "spec_941030940d23f46826acaa0c6fed8bbc" + ], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Primary income for gross of fixed capital consumption in 49 places, 2015 to 2022. Current US dollars · World Bank International Debt Statistics (IDS). You asked for Germany, Eritrea, Namibia, South Sudan, and Seychelles. The data holds no values for them. Germany's gross disbursements to the 48 countries in Sub-Saharan Africa for official development assistance, 2015 to 2022. Current US dollars · OECD DAC2a. This shows the 48 countries in Sub-Saharan Africa, each on its own.", + "complete": true, + "specs": [ + "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "spec_941030940d23f46826acaa0c6fed8bbc" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 720, + "columns": [ + "part", + "stat_var", + "stat_var_label", + "observationAbout", + "observationAbout_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label" + ], + "part_rows": [ + { + "part": "GNI", + "rows": 348 + }, + { + "part": "ODA disbursements", + "rows": 372 + } + ], + "complete": true, + "members": [ + { + "parts": [ + "GNI" + ], + "spec_id": "spec_bc87ff8e0f29960c38c96a4f4d2b0e20", + "content_version": "cv_18a63cb9e24a4ce6dfcd1c60f0c5a470", + "sentence": "Primary income for gross of fixed capital consumption in 49 places, 2015 to 2022. Current US dollars · World Bank International Debt Statistics (IDS)." + }, + { + "parts": [ + "ODA disbursements" + ], + "spec_id": "spec_941030940d23f46826acaa0c6fed8bbc", + "content_version": "cv_9362a741d742d00a0f4f5d671e0b400c", + "sentence": "Germany's gross disbursements to the 48 countries in Sub-Saharan Africa for official development assistance, 2015 to 2022. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "search_warning": true + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.parquet b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.parquet new file mode 100644 index 0000000..6ef2818 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/choose-candidate-two-parts.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-echo-drops-malformed-items.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-echo-drops-malformed-items.json new file mode 100644 index 0000000..84cfded --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-echo-drops-malformed-items.json @@ -0,0 +1,9050 @@ +{ + "format_version": 1, + "name": "choose-echo-drops-malformed-items", + "description": "An item that is not an object, or whose required members are not strings, reads as absent, and an item reads as its schema's members of the types they admit, so each echoed operations and assumptions list posts its read forms: rank without over or target_year and the growth operation, the definite part's own assumption and the grants assumption with its string ref alone, and the chosen candidate's empty list, as none of its items reads.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-candidate-echoes-assumptions", + "edit": "The definite part's operations hold 42, an operation whose verb is a number and one whose over and target_year are not read, its assumptions gain a string, an assumption whose text is null and one with a number among its refs and an unknown member, and the chosen candidate's reading_assumptions hold 7 and an assumption whose text is null." + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany and aid flows to Kenya" + }, + { + "op": "choose", + "part": 0, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany and aid flows to Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "810e4170976b4e69aade88273e59e8c2" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany and aid flows to Kenya", + "normalized_query": "GNI of Germany and aid flows to Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "810e4170976b4e69aade88273e59e8c2", + "warnings": [], + "timing_ms": { + "total": 3563, + "by_step": { + "coverage": 0, + "extract": 915 + } + }, + "llm_usage": { + "input_tokens": 11874, + "output_tokens": 489, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [ + { + "code": "direction_discarded", + "severity": "warn", + "message": "Kenya was named as the recipient; this shape reports the place as its own subject, so the direction was dropped." + } + ], + "timing_ms": { + "total": 2206, + "by_step": { + "recall": 1, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 270, + "shape_groups": 201, + "shape_labels": 6, + "shape_admission": 0, + "shape": 1165, + "bind": 1038, + "materialise": 1, + "answer": 1 + } + }, + "rendered_sentence": "2 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 1960 to 2025 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 1990 to 2025. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "sentence_plan": [ + { + "kind": "text", + "text": "2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "1960 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "1990 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Kenya", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself." + } + ], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "definition": { + "schema_version": 1, + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 66, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 66, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_c024875e07eee23ed7cb8d18b4436df1", + "definition": { + "schema_version": 1, + "spec_id": "spec_c024875e07eee23ed7cb8d18b4436df1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1990", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 72, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 36 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 72, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1990, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity in international dollars in Germany and Kenya, 1990 to 2025. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1990 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_f0d0bb4841c0e55d6d4a353e45dcd52c": [ + 7, + { + "kind": "place_scope", + "binding_ref": "where:", + "text": null + } + ], + "spec_c024875e07eee23ed7cb8d18b4436df1": [] + } + }, + { + "variable_text": "aid flows", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "slot_defaulted", + "severity": "warn", + "message": "No aid type was named, so the answer covers official development assistance." + } + ], + "timing_ms": { + "total": 2564, + "by_step": { + "recall": 607, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 218, + "shape_groups": 18, + "shape_labels": 0, + "shape_admission": 0, + "shape": 930, + "bind": 1014, + "materialise": 6, + "answer": 4, + "options": 3 + } + }, + "restatement": { + "variable_text": "aid flows", + "entities": [ + { + "text": "Germany" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [ + 42, + { + "verb": 7, + "phrase": "top 5 donors" + }, + { + "verb": "rank", + "phrase": "top 5 donors", + "over": 3, + "target_year": true + }, + { + "verb": "growth", + "phrase": "growth of GDP", + "over": "year" + } + ], + "departures": [ + { + "code": "closest_match", + "asked": "aid flows", + "shown": "gross disbursements", + "text": "You asked for aid flows. This shows gross disbursements, the closest measure the data holds." + }, + { + "code": "direction_inferred", + "binding_ref": "where:", + "asked": "Germany", + "text": "You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider." + } + ], + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + }, + "assumed", + { + "kind": "place_scope", + "binding_ref": "where:", + "text": null + }, + { + "kind": "declared_default", + "binding_ref": "how:dacTypeOfFinance", + "text": "grants", + "refs": [ + "DACTypeOfFinance110", + 110 + ], + "note": "unread" + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "definition": { + "schema_version": 1, + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 65, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 65, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 61, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 65, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 59, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 44, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 29, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "declared_default" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_433a5ca3b9aa482f8f332201570ef664", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 65, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GNI has 2 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 1960 to 2025 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 1990 to 2025. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider. Assumed: official development assistance.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GNI", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " has 2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "1960 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "1990 to 2025", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "You asked for aid flows. This shows gross disbursements, the closest measure the data holds.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "official development assistance", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + }, + "assumptions": [], + "variable_text": "GNI" + }, + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + }, + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + }, + { + "kind": "declared_default", + "binding_ref": "how:dacTypeOfFinance", + "text": "grants", + "refs": [ + "DACTypeOfFinance110" + ] + } + ], + "variable_text": "aid flows", + "operations": [ + { + "verb": "rank", + "phrase": "top 5 donors" + }, + { + "verb": "growth", + "phrase": "growth of GDP", + "over": "year" + } + ] + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "2e151fcdeb6f40b3be7b3da99c277765" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "2e151fcdeb6f40b3be7b3da99c277765", + "warnings": [], + "timing_ms": { + "total": 947, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 1, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 0, + "materialise": 0, + "answer": 1, + "options": 0 + } + }, + "operations": [], + "departures": [ + { + "code": "entity_unavailable", + "binding_ref": "where:", + "text": "You asked for Kenya. The data holds no values for it." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "definition": { + "schema_version": 1, + "spec_id": "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 66, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 66, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + }, + { + "variable_text": "aid flows", + "warnings": [], + "timing_ms": { + "total": 924, + "by_step": { + "validate": 0, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 909, + "bind": 0, + "where_places": 0, + "materialise": 4, + "answer": 5, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "definition": { + "schema_version": 1, + "spec_id": "spec_473682ae7e62be173cac86a13815f0fa", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 65, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 65, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 61, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 65, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 59, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 44, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 29, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_433a5ca3b9aa482f8f332201570ef664", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 65, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. Assumed: official development assistance.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for Kenya. The data holds no values for it.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "official development assistance", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GNI has 2 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 1960 to 2025 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 1990 to 2025. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. You asked for aid flows. This shows gross disbursements, the closest measure the data holds. You named Germany without a direction. Only the data with Germany as the provider holds values, so this reads it as the provider. Assumed: official development assistance.", + "complete": false, + "specs": [ + "spec_473682ae7e62be173cac86a13815f0fa" + ], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 1960 to 2025. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Germany's gross disbursements to Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. Assumed: official development assistance.", + "complete": true, + "specs": [ + "spec_f0d0bb4841c0e55d6d4a353e45dcd52c", + "spec_473682ae7e62be173cac86a13815f0fa" + ], + "gaps": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-echoes-separate-and-operations.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-echoes-separate-and-operations.json new file mode 100644 index 0000000..41178a4 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-echoes-separate-and-operations.json @@ -0,0 +1,10819 @@ +{ + "format_version": 1, + "name": "choose-echoes-separate-and-operations", + "description": "A definite part's identity entry echoes the part's separate flag when it is true and its operations when it has any.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-option-beside-definite", + "edit": "Part 0, the definite part, carries separate true and the operation {'verb': 'growth', 'phrase': 'growth of GDP', 'over': 'year'}." + }, + "call": [ + { + "op": "search", + "question": "GDP of sub-Saharan Africa, and debt of Kenya" + }, + { + "op": "choose", + "part": 1, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GDP of sub-Saharan Africa, and debt of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "42c8045fa5264f7ba7622ef7394703ec" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "normalized_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "42c8045fa5264f7ba7622ef7394703ec", + "warnings": [], + "timing_ms": { + "total": 4563, + "by_step": { + "coverage": 0, + "extract": 1204 + } + }, + "llm_usage": { + "input_tokens": 12972, + "output_tokens": 920, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 2905, + "by_step": { + "recall": 1, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 243, + "shape_groups": 19, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1228, + "bind": 1200, + "materialise": 180, + "answer": 6, + "options": 290 + } + }, + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Sub-Saharan Africa" + }, + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [ + { + "verb": "growth", + "phrase": "growth of GDP", + "over": "year" + } + ], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "asked": "sub-Saharan Africa", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "definition": { + "schema_version": 1, + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2859, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2859, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossValueAdded", + "label": "GrossValueAdded" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetDomesticProduction", + "label": "Net Domestic Production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetValueAdded", + "label": "Net Value Added" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinanceService", + "label": "Finance Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MOSPI_OtherService", + "label": "MOSPI Other Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TradeSector", + "label": "Trade Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialServices", + "label": "Financial Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Industry", + "label": "Industry" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Services", + "label": "Services" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "options": [ + { + "value": { + "ref": { + "ref": "NAICS/23", + "label": "Construction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/44-45", + "label": "Retail trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/53", + "label": "Real estate and rental and leasing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/22", + "label": "Utilities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/55", + "label": "Management of companies and enterprises" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/48-49", + "label": "Transportation and warehousing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/61", + "label": "Educational services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/51", + "label": "Information" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/42", + "label": "Wholesale trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/21", + "label": "Mining, quarrying, and oil and gas extraction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/11", + "label": "Agriculture, forestry, fishing and hunting" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/72", + "label": "Accommodation and food services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/52", + "label": "Finance and insurance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/54", + "label": "Professional, Scientific, and Technical Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/71", + "label": "Arts, entertainment, and recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/311-316_322-326", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/31-33", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/321_327-339", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/56", + "label": "Administrative and Support and Waste Management Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/62", + "label": "Health care and social assistance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/81", + "label": "Other services, except public administration" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/92", + "label": "Public administration" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "XAF", + "label": "XAF" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "equivalent_readings": [ + { + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "definition": { + "schema_version": 1, + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicProduction", + "measured_property": "valueAdded", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "currencyConversionBasis", + "binding": { + "state": "unbound" + } + }, + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + }, + { + "property": "productTaxBasis", + "binding": { + "state": "value", + "ref": "IncludingProductTaxes" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "CurrencyUSD" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicproduction_valueadded_measuredvalue_nominal", + "label": "Gross domestic product (GDP)", + "population_type": { + "ref": "EconomicProduction", + "label": "economic production" + }, + "measured_property": { + "ref": "valueAdded", + "label": "value added" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 2, + "member_digest": "ef9c4356618ed98aab762248e68799d78c74ad249a6041dad0e8a345c85ee02f", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "currencyConversionBasis" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1980", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2031, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 46 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2031, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1980, + "end_year": 2025 + }, + "licence": { + "label": "IMF Copyright and Usage" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + }, + "unit": { + "basis": "bound", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PurchasingPowerParityRate", + "label": "purchasing power parity rate" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_df3e3c939162b3cfe113d2d78d4b4986", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + }, + "separate": true + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 2973, + "by_step": { + "recall": 495, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 190, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 983, + "bind": 1495 + } + }, + "rendered_sentence": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "role_not_resolved", + "category": "unresolved", + "message": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "entity_terms": [ + "sub-Saharan Africa", + "Kenya" + ], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "sub-Saharan Africa to Kenya", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "Kenya to sub-Saharan Africa", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "to" + }, + { + "text": "Kenya", + "role_text": "from" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + }, + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "assumptions": [], + "variable_text": "GDP", + "separate": true, + "operations": [ + { + "verb": "growth", + "phrase": "growth of GDP", + "over": "year" + } + ] + }, + { + "entry_kind": "parsed", + "part": { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "5cce61af304d4b7096821150e22e2ad7" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "5cce61af304d4b7096821150e22e2ad7", + "warnings": [], + "timing_ms": { + "total": 2558, + "by_step": { + "coverage": 0 + } + }, + "llm_usage": { + "input_tokens": 4539, + "output_tokens": 503, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 1289, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 818, + "bind": 0, + "where_places": 0, + "materialise": 211, + "answer": 1, + "options": 259 + } + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "definition": { + "schema_version": 1, + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2859, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2859, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "XAF", + "label": "XAF" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_df3e3c939162b3cfe113d2d78d4b4986", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 2533, + "by_step": { + "recall": 1, + "shape_arcs": 1, + "shape_probe_coverage": 4, + "shape_probe": 180, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 856, + "bind": 1659, + "materialise": 4, + "answer": 13 + } + }, + "rendered_sentence": "2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "sentence_plan": [ + { + "kind": "text", + "text": "2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "outstanding external debt", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "1973 to 2024", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2023", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_db19b572801b0e2db437bf4722826ef1", + "definition": { + "schema_version": 1, + "spec_id": "spec_db19b572801b0e2db437bf4722826ef1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialPosition", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialPositionType", + "binding": { + "state": "unbound" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "interestRateVariability", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialposition_amount_measuredvalue_nominal_by_role", + "label": "Outstanding external debt, by creditor", + "population_type": { + "ref": "FinancialPosition", + "label": "financial position" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 85, + "member_digest": "59b8172b4da7c06ded4825c4f3f96a3b90414a056cb5c6447595c6be1748066b", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "financingResource", + "interestRateVariability", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1973", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.DOD.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "origin": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 13, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 11 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 0, + "series": 0, + "role_counts": {} + } + ] + }, + "download": { + "rows": 13, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1973, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeBLAT", + "label": "bilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePCBK", + "label": "commercial banks (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Loan", + "label": "loan" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SDRAllocation", + "label": "SDR allocation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "options": [ + { + "value": { + "ref": { + "ref": "VariableInterestRate", + "label": "variable interest rate" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "IDSNonConcessional", + "label": "non-concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 26, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa, 1973 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "outstanding external debt", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialPositionType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "interestRateVariability", + "binding_ref": "how:interestRateVariability", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialPositionType", + "binding_ref": "how:financialPositionType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1973 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "low", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "open_axis_facts": [ + { + "property": "financialPositionType", + "varies": false, + "value": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "count": 1 + } + ] + } + ] + } + }, + { + "spec_id": "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c", + "definition": { + "schema_version": 1, + "spec_id": "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "value", + "ref": "DebtInstrument" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "value", + "ref": "PublicOrPubliclyGuaranteed" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialobligation_amount_measuredvalue_nominal_by_role", + "label": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "population_type": { + "ref": "FinancialObligation", + "label": "financial obligation" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "9c8389fcc18b49e94e1286c629ec5260fce8837ba425bc60c6f31d333d34a73c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Commitment", + "label": "commitment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2023", + "end": "2023" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.COM.DPPG.CD", + "exact": true + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "origin": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 1, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 1 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2023, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 0, + "series": 0, + "role_counts": {} + }, + { + "year": 2021, + "observations": 0, + "series": 0, + "role_counts": {} + } + ] + }, + "download": { + "rows": 1, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2023, + "end_year": 2023 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "Commitment", + "label": "commitment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa in 2023. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialObligationType", + "how:financingResource", + "how:guaranteeStatus" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialObligationType", + "binding_ref": "how:financialObligationType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Commitment", + "label": "commitment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DebtInstrument", + "label": "debt instrument" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "low", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_db19b572801b0e2db437bf4722826ef1": [], + "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. This shows the 48 countries in Sub-Saharan Africa, each on its own. Debt has 2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Debt", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " has 2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "outstanding external debt", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "1973 to 2024", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "2023", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "complete": false, + "specs": [ + "spec_3c3d4e571162850b30db0321638f955b" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. This shows the 48 countries in Sub-Saharan Africa, each on its own. Debt has 2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "complete": false, + "specs": [ + "spec_3c3d4e571162850b30db0321638f955b" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-beside-definite.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-beside-definite.json new file mode 100644 index 0000000..65605d0 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-beside-definite.json @@ -0,0 +1,10805 @@ +{ + "format_version": 1, + "name": "choose-option-beside-definite", + "description": "Choosing option 0 on part 1, a no_data part whose direction the question leaves open, beside a definite part whose places are a named group posts dataset_resubmit with the definite part's identity, entity_groups and assumptions as an identity entry, and the chosen option's data_query part as a parsed entry. Part 0 answers definite again, and part 1 answers the debt read in the chosen direction.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:07:18Z" + }, + "call": [ + { + "op": "search", + "question": "GDP of sub-Saharan Africa, and debt of Kenya" + }, + { + "op": "choose", + "part": 1, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GDP of sub-Saharan Africa, and debt of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "42c8045fa5264f7ba7622ef7394703ec" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "normalized_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "42c8045fa5264f7ba7622ef7394703ec", + "warnings": [], + "timing_ms": { + "total": 4563, + "by_step": { + "coverage": 0, + "extract": 1204 + } + }, + "llm_usage": { + "input_tokens": 12972, + "output_tokens": 920, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 2905, + "by_step": { + "recall": 1, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 243, + "shape_groups": 19, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1228, + "bind": 1200, + "materialise": 180, + "answer": 6, + "options": 290 + } + }, + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Sub-Saharan Africa" + }, + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "asked": "sub-Saharan Africa", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "definition": { + "schema_version": 1, + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2859, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2859, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossValueAdded", + "label": "GrossValueAdded" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetDomesticProduction", + "label": "Net Domestic Production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetValueAdded", + "label": "Net Value Added" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinanceService", + "label": "Finance Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MOSPI_OtherService", + "label": "MOSPI Other Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TradeSector", + "label": "Trade Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialServices", + "label": "Financial Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Industry", + "label": "Industry" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Services", + "label": "Services" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "options": [ + { + "value": { + "ref": { + "ref": "NAICS/23", + "label": "Construction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/44-45", + "label": "Retail trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/53", + "label": "Real estate and rental and leasing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/22", + "label": "Utilities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/55", + "label": "Management of companies and enterprises" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/48-49", + "label": "Transportation and warehousing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/61", + "label": "Educational services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/51", + "label": "Information" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/42", + "label": "Wholesale trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/21", + "label": "Mining, quarrying, and oil and gas extraction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/11", + "label": "Agriculture, forestry, fishing and hunting" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/72", + "label": "Accommodation and food services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/52", + "label": "Finance and insurance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/54", + "label": "Professional, Scientific, and Technical Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/71", + "label": "Arts, entertainment, and recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/311-316_322-326", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/31-33", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/321_327-339", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/56", + "label": "Administrative and Support and Waste Management Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/62", + "label": "Health care and social assistance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/81", + "label": "Other services, except public administration" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/92", + "label": "Public administration" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "XAF", + "label": "XAF" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "equivalent_readings": [ + { + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "definition": { + "schema_version": 1, + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicProduction", + "measured_property": "valueAdded", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "currencyConversionBasis", + "binding": { + "state": "unbound" + } + }, + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + }, + { + "property": "productTaxBasis", + "binding": { + "state": "value", + "ref": "IncludingProductTaxes" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "CurrencyUSD" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicproduction_valueadded_measuredvalue_nominal", + "label": "Gross domestic product (GDP)", + "population_type": { + "ref": "EconomicProduction", + "label": "economic production" + }, + "measured_property": { + "ref": "valueAdded", + "label": "value added" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 2, + "member_digest": "ef9c4356618ed98aab762248e68799d78c74ad249a6041dad0e8a345c85ee02f", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "currencyConversionBasis" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1980", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2031, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 46 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2031, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1980, + "end_year": 2025 + }, + "licence": { + "label": "IMF Copyright and Usage" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + }, + "unit": { + "basis": "bound", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PurchasingPowerParityRate", + "label": "purchasing power parity rate" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_df3e3c939162b3cfe113d2d78d4b4986", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 2973, + "by_step": { + "recall": 495, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 190, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 983, + "bind": 1495 + } + }, + "rendered_sentence": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "role_not_resolved", + "category": "unresolved", + "message": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "entity_terms": [ + "sub-Saharan Africa", + "Kenya" + ], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "sub-Saharan Africa to Kenya", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "Kenya to sub-Saharan Africa", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "to" + }, + { + "text": "Kenya", + "role_text": "from" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + }, + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "assumptions": [], + "variable_text": "GDP" + }, + { + "entry_kind": "parsed", + "part": { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "5cce61af304d4b7096821150e22e2ad7" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "5cce61af304d4b7096821150e22e2ad7", + "warnings": [], + "timing_ms": { + "total": 2558, + "by_step": { + "coverage": 0 + } + }, + "llm_usage": { + "input_tokens": 4539, + "output_tokens": 503, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 1289, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 818, + "bind": 0, + "where_places": 0, + "materialise": 211, + "answer": 1, + "options": 259 + } + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "definition": { + "schema_version": 1, + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2859, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2859, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "XAF", + "label": "XAF" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_df3e3c939162b3cfe113d2d78d4b4986", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 2533, + "by_step": { + "recall": 1, + "shape_arcs": 1, + "shape_probe_coverage": 4, + "shape_probe": 180, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 856, + "bind": 1659, + "materialise": 4, + "answer": 13 + } + }, + "rendered_sentence": "2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "sentence_plan": [ + { + "kind": "text", + "text": "2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "outstanding external debt", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "1973 to 2024", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2023", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_db19b572801b0e2db437bf4722826ef1", + "definition": { + "schema_version": 1, + "spec_id": "spec_db19b572801b0e2db437bf4722826ef1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialPosition", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialPositionType", + "binding": { + "state": "unbound" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "interestRateVariability", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialposition_amount_measuredvalue_nominal_by_role", + "label": "Outstanding external debt, by creditor", + "population_type": { + "ref": "FinancialPosition", + "label": "financial position" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 85, + "member_digest": "59b8172b4da7c06ded4825c4f3f96a3b90414a056cb5c6447595c6be1748066b", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "financingResource", + "interestRateVariability", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1973", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.DOD.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "origin": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 13, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 11 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 0, + "series": 0, + "role_counts": {} + } + ] + }, + "download": { + "rows": 13, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1973, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeBLAT", + "label": "bilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePCBK", + "label": "commercial banks (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Loan", + "label": "loan" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SDRAllocation", + "label": "SDR allocation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "options": [ + { + "value": { + "ref": { + "ref": "VariableInterestRate", + "label": "variable interest rate" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "IDSNonConcessional", + "label": "non-concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 26, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa, 1973 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "outstanding external debt", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialPositionType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "interestRateVariability", + "binding_ref": "how:interestRateVariability", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialPositionType", + "binding_ref": "how:financialPositionType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1973 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "low", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "open_axis_facts": [ + { + "property": "financialPositionType", + "varies": false, + "value": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "count": 1 + } + ] + } + ] + } + }, + { + "spec_id": "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c", + "definition": { + "schema_version": 1, + "spec_id": "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "value", + "ref": "DebtInstrument" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "value", + "ref": "PublicOrPubliclyGuaranteed" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialobligation_amount_measuredvalue_nominal_by_role", + "label": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "population_type": { + "ref": "FinancialObligation", + "label": "financial obligation" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "9c8389fcc18b49e94e1286c629ec5260fce8837ba425bc60c6f31d333d34a73c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Commitment", + "label": "commitment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2023", + "end": "2023" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.COM.DPPG.CD", + "exact": true + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "origin": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 1, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 1 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2023, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 0, + "series": 0, + "role_counts": {} + }, + { + "year": 2021, + "observations": 0, + "series": 0, + "role_counts": {} + } + ] + }, + "download": { + "rows": 1, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2023, + "end_year": 2023 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "Commitment", + "label": "commitment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa in 2023. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialObligationType", + "how:financingResource", + "how:guaranteeStatus" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialObligationType", + "binding_ref": "how:financialObligationType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Commitment", + "label": "commitment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DebtInstrument", + "label": "debt instrument" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "low", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_db19b572801b0e2db437bf4722826ef1": [], + "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. This shows the 48 countries in Sub-Saharan Africa, each on its own. Debt has 2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Debt", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " has 2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "outstanding external debt", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "1973 to 2024", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "2023", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "complete": false, + "specs": [ + "spec_3c3d4e571162850b30db0321638f955b" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. This shows the 48 countries in Sub-Saharan Africa, each on its own. Debt has 2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "complete": false, + "specs": [ + "spec_3c3d4e571162850b30db0321638f955b" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-two-part-query.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-two-part-query.json new file mode 100644 index 0000000..e7062d1 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-two-part-query.json @@ -0,0 +1,285 @@ +{ + "format_version": 1, + "name": "choose-option-two-part-query", + "description": "A chosen option whose data_query holds other than one part raises ContractError contract_violation before any request, in a one-part answer as in a several-part one.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-place-one-part", + "edit": "The chosen option's data_query holds its one part twice." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1ad25aff9f6a4ad7ac21922af623e5e9" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "1ad25aff9f6a4ad7ac21922af623e5e9", + "warnings": [], + "timing_ms": { + "total": 1084, + "by_step": { + "coverage": 0, + "extract": 1082 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + }, + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "1ad25aff9f6a4ad7ac21922af623e5e9" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-option-without-data-query.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-without-data-query.json new file mode 100644 index 0000000..d01ef60 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-option-without-data-query.json @@ -0,0 +1,246 @@ +{ + "format_version": 1, + "name": "choose-option-without-data-query", + "description": "Choosing an option with no data_query in a one-part answer raises ContractError contract_violation with no request, as in a several-part answer.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-place-one-part", + "edit": "The no_data part's first option loses its data_query." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1ad25aff9f6a4ad7ac21922af623e5e9" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "1ad25aff9f6a4ad7ac21922af623e5e9", + "warnings": [], + "timing_ms": { + "total": 1084, + "by_step": { + "coverage": 0, + "extract": 1082 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]" + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "1ad25aff9f6a4ad7ac21922af623e5e9" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-part-by-mention.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-part-by-mention.json new file mode 100644 index 0000000..9766448 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-part-by-mention.json @@ -0,0 +1,3521 @@ +{ + "format_version": 1, + "name": "choose-part-by-mention", + "description": "Naming the part by \"Congo\", a word its options mention, and the option by label posts that option's data_query, as naming the part by index does.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:53Z" + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "part": "Congo", + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1929173472984df6b31fbc19efa40365" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "1929173472984df6b31fbc19efa40365", + "warnings": [], + "timing_ms": { + "total": 1065, + "by_step": { + "coverage": 0, + "extract": 1063 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 0, + "by_step": { + "recall": 0 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "918df537e4f5439580bee8e871d64d06" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "parsed", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "918df537e4f5439580bee8e871d64d06", + "warnings": [], + "timing_ms": { + "total": 2076, + "by_step": { + "coverage": 0 + } + }, + "llm_usage": { + "input_tokens": 4231, + "output_tokens": 200, + "cached_tokens": 1516 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 1942, + "by_step": { + "recall": 0, + "shape_arcs": 0, + "shape_probe_coverage": 2, + "shape_probe": 3, + "shape_groups": 17, + "shape_labels": 0, + "shape_admission": 1, + "shape": 795, + "bind": 1135, + "materialise": 6, + "answer": 4, + "options": 2 + } + }, + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "definition": { + "schema_version": 1, + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/COD" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 65, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 65, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 45, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 65, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 59, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 29, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "slot": "dac2aAidType", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_2e1f188265cd4f5123438ee26a59cc9e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/COD" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 65, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "CDF", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "complete": true, + "specs": [ + "spec_53b1ed52ebddd28ce274d419b53037c3" + ], + "gaps": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-place-one-part.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-one-part.json new file mode 100644 index 0000000..b9b92ba --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-one-part.json @@ -0,0 +1,3520 @@ +{ + "format_version": 1, + "name": "choose-place-one-part", + "description": "Choosing \"Congo [DRC]\" by label in a one-part answer posts that option's data_query unchanged as the input of a new search, which answers definite.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:49Z" + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1ad25aff9f6a4ad7ac21922af623e5e9" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "1ad25aff9f6a4ad7ac21922af623e5e9", + "warnings": [], + "timing_ms": { + "total": 1084, + "by_step": { + "coverage": 0, + "extract": 1082 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "11f83a7e47c0452492b5c433c0829ff3" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "parsed", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "11f83a7e47c0452492b5c433c0829ff3", + "warnings": [], + "timing_ms": { + "total": 2651, + "by_step": { + "coverage": 0 + } + }, + "llm_usage": { + "input_tokens": 4231, + "output_tokens": 200, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 2337, + "by_step": { + "recall": 0, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 205, + "shape_groups": 20, + "shape_labels": 2, + "shape_admission": 0, + "shape": 1074, + "bind": 1250, + "materialise": 6, + "answer": 5, + "options": 2 + } + }, + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "definition": { + "schema_version": 1, + "spec_id": "spec_53b1ed52ebddd28ce274d419b53037c3", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/COD" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 65, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 65, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 45, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 65, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 59, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 29, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "slot": "dac2aAidType", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_2e1f188265cd4f5123438ee26a59cc9e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/COD" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 65, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "CDF", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "complete": true, + "specs": [ + "spec_53b1ed52ebddd28ce274d419b53037c3" + ], + "gaps": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-place-two-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-two-parts.json new file mode 100644 index 0000000..481f93a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-place-two-parts.json @@ -0,0 +1,3975 @@ +{ + "format_version": 1, + "name": "choose-place-two-parts", + "description": "Choosing \"Congo [DRC]\" on part 1 of a two-part answer posts dataset_resubmit with one entry per part in part order: the chosen option's data_query part as a parsed entry, and part 0, still a refusal, as a parsed entry of its restatement. Part 1 answers definite.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:56Z" + }, + "call": [ + { + "op": "search", + "question": "Kenya's GDP, and ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "part": 1, + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "Kenya's GDP, and ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "69c09616094044ed89eaae3a5ddb6bf3" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "normalized_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "69c09616094044ed89eaae3a5ddb6bf3", + "warnings": [], + "timing_ms": { + "total": 1185, + "by_step": { + "coverage": 0, + "extract": 1183 + } + }, + "llm_usage": { + "input_tokens": 2256, + "output_tokens": 207, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 0, + "by_step": { + "recall": 0 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + }, + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 0, + "by_step": { + "recall": 0 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "status": "no_data" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "parsed", + "part": { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + }, + { + "entry_kind": "parsed", + "part": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e7ec0fb964854583aff78b27d1df099a" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "e7ec0fb964854583aff78b27d1df099a", + "warnings": [], + "timing_ms": { + "total": 2313, + "by_step": { + "coverage": 0 + } + }, + "llm_usage": { + "input_tokens": 4244, + "output_tokens": 202, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [ + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + }, + { + "variable_text": "ODA disbursements", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 2186, + "by_step": { + "recall": 0, + "shape_arcs": 0, + "shape_probe_coverage": 2, + "shape_probe": 385, + "shape_groups": 22, + "shape_labels": 1, + "shape_admission": 0, + "shape": 1267, + "bind": 907, + "materialise": 6, + "answer": 4, + "options": 2 + } + }, + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_4b8c1ba9efe879b10dc3fde2c24dc483", + "definition": { + "schema_version": 1, + "spec_id": "spec_4b8c1ba9efe879b10dc3fde2c24dc483", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/COD", + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 130, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 65 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 2, + "series": 2, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 2 + }, + "recent_years": [ + { + "year": 2024, + "observations": 2, + "series": 2, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 2 + } + }, + { + "year": 2023, + "observations": 2, + "series": 2, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 2 + } + }, + { + "year": 2022, + "observations": 2, + "series": 2, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 2 + } + } + ] + }, + "download": { + "rows": 130, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 106, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 130, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 118, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 71, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 58, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo and Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo and Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD", + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "slot": "dac2aAidType", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_9de5a8ccb2c8bd8f2ad793949b9c0222", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/COD", + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 130, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. \"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific. Germany's gross disbursements to Democratic Republic of the Congo and Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Democratic Republic of the Congo and Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/COD", + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. \"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific. Germany's gross disbursements to Democratic Republic of the Congo and Kenya for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "complete": false, + "specs": [ + "spec_4b8c1ba9efe879b10dc3fde2c24dc483" + ], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-posts-unsupported-placeholder.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-posts-unsupported-placeholder.json new file mode 100644 index 0000000..670c09f --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-posts-unsupported-placeholder.json @@ -0,0 +1,6617 @@ +{ + "format_version": 1, + "name": "choose-posts-unsupported-placeholder", + "description": "A part that is unsupported and has no restatement posts a placeholder entry with its unsupported code and variable_text.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-option-beside-definite", + "edit": "Part 0 becomes an unsupported part with code scope_too_broad and no restatement." + }, + "call": [ + { + "op": "search", + "question": "GDP of sub-Saharan Africa, and debt of Kenya" + }, + { + "op": "choose", + "part": 1, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GDP of sub-Saharan Africa, and debt of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "42c8045fa5264f7ba7622ef7394703ec" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "normalized_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "42c8045fa5264f7ba7622ef7394703ec", + "warnings": [], + "timing_ms": { + "total": 4563, + "by_step": { + "coverage": 0, + "extract": 1204 + } + }, + "llm_usage": { + "input_tokens": 12972, + "output_tokens": 920, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 2905, + "by_step": { + "recall": 1, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 243, + "shape_groups": 19, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1228, + "bind": 1200, + "materialise": 180, + "answer": 6, + "options": 290 + } + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "asked": "sub-Saharan Africa", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own." + } + ], + "status": "unsupported", + "unsupported": { + "code": "scope_too_broad", + "pointer": "/definition/identity", + "detail": "the family is too broad to settle; bind a what or how slot" + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 2973, + "by_step": { + "recall": 495, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 190, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 983, + "bind": 1495 + } + }, + "rendered_sentence": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "role_not_resolved", + "category": "unresolved", + "message": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "entity_terms": [ + "sub-Saharan Africa", + "Kenya" + ], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "sub-Saharan Africa to Kenya", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "Kenya to sub-Saharan Africa", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "to" + }, + { + "text": "Kenya", + "role_text": "from" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "placeholder", + "status": "unsupported", + "code": "scope_too_broad", + "variable_text": "GDP" + }, + { + "entry_kind": "parsed", + "part": { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "5cce61af304d4b7096821150e22e2ad7" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "5cce61af304d4b7096821150e22e2ad7", + "warnings": [], + "timing_ms": { + "total": 2558, + "by_step": { + "coverage": 0 + } + }, + "llm_usage": { + "input_tokens": 4539, + "output_tokens": 503, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 1289, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 818, + "bind": 0, + "where_places": 0, + "materialise": 211, + "answer": 1, + "options": 259 + } + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "definition": { + "schema_version": 1, + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2859, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2859, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "XAF", + "label": "XAF" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_df3e3c939162b3cfe113d2d78d4b4986", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + }, + { + "code": "time_window_defaulted", + "severity": "warn", + "message": "no time_text was given; the answer was resolved across every period with data." + } + ], + "timing_ms": { + "total": 2533, + "by_step": { + "recall": 1, + "shape_arcs": 1, + "shape_probe_coverage": 4, + "shape_probe": 180, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 856, + "bind": 1659, + "materialise": 4, + "answer": 13 + } + }, + "rendered_sentence": "2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "sentence_plan": [ + { + "kind": "text", + "text": "2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "outstanding external debt", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "1973 to 2024", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2023", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_db19b572801b0e2db437bf4722826ef1", + "definition": { + "schema_version": 1, + "spec_id": "spec_db19b572801b0e2db437bf4722826ef1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialPosition", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialPositionType", + "binding": { + "state": "unbound" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "interestRateVariability", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialposition_amount_measuredvalue_nominal_by_role", + "label": "Outstanding external debt, by creditor", + "population_type": { + "ref": "FinancialPosition", + "label": "financial position" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 85, + "member_digest": "59b8172b4da7c06ded4825c4f3f96a3b90414a056cb5c6447595c6be1748066b", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "financingResource", + "interestRateVariability", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1973", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.DOD.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "origin": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 13, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 11 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 0, + "series": 0, + "role_counts": {} + } + ] + }, + "download": { + "rows": 13, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1973, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeBLAT", + "label": "bilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePCBK", + "label": "commercial banks (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Loan", + "label": "loan" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SDRAllocation", + "label": "SDR allocation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "options": [ + { + "value": { + "ref": { + "ref": "VariableInterestRate", + "label": "variable interest rate" + }, + "value_kind": "enum_value" + }, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "IDSNonConcessional", + "label": "non-concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 13, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 26, + "served_rows_exact": true + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa, 1973 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "outstanding external debt", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialPositionType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "interestRateVariability", + "binding_ref": "how:interestRateVariability", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialPositionType", + "binding_ref": "how:financialPositionType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1973 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialPositionType", + "label": "financial position type" + }, + "label": "financial position type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "interestRateVariability", + "label": "interest rate variability" + }, + "label": "interest rate variability" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "low", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "open_axis_facts": [ + { + "property": "financialPositionType", + "varies": false, + "value": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "AmountOutstanding", + "label": "amount outstanding" + }, + "count": 1 + } + ] + } + ] + } + }, + { + "spec_id": "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c", + "definition": { + "schema_version": 1, + "spec_id": "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "value", + "ref": "DebtInstrument" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "value", + "ref": "PublicOrPubliclyGuaranteed" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialobligation_amount_measuredvalue_nominal_by_role", + "label": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "population_type": { + "ref": "FinancialObligation", + "label": "financial obligation" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "9c8389fcc18b49e94e1286c629ec5260fce8837ba425bc60c6f31d333d34a73c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Commitment", + "label": "commitment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2023", + "end": "2023" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.COM.DPPG.CD", + "exact": true + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "origin" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "origin": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 1, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 1 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2023, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 0, + "series": 0, + "role_counts": {} + }, + { + "year": 2021, + "observations": 0, + "series": 0, + "role_counts": {} + } + ] + }, + "download": { + "rows": 1, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2023, + "end_year": 2023 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "Commitment", + "label": "commitment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DebtInstrument", + "label": "debt instrument" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa in 2023. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialObligationType", + "how:financingResource", + "how:guaranteeStatus" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialObligationType", + "binding_ref": "how:financialObligationType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialObligationType", + "label": "financial obligation type" + }, + "label": "financial obligation type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Commitment", + "label": "commitment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DebtInstrument", + "label": "debt instrument" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "low", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_db19b572801b0e2db437bf4722826ef1": [], + "spec_6eb3e2b7e6bc64c3f0ae0ac0d41c9b3c": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. This shows the 48 countries in Sub-Saharan Africa, each on its own. Debt has 2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "This shows the 48 countries in Sub-Saharan Africa, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Debt", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " has 2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "outstanding external debt", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "1973 to 2024", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Commitments of public or publicly guaranteed external debt (debt instrument), by creditor", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "the 48 countries in Sub-Saharan Africa", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "World Bank International Debt Statistics (IDS)", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "2023", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "unsupported", + "options": 0 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. This shows the 48 countries in Sub-Saharan Africa, each on its own. Debt has 2 readings. Kenya's outstanding external debt owed to the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 1973 to 2024 · Current US dollars. Commitments of public or publicly guaranteed external debt (debt instrument), by creditor to Kenya from the 48 countries in Sub-Saharan Africa. World Bank International Debt Statistics (IDS) · 2023 · Current US dollars.", + "complete": false, + "specs": [ + "spec_3c3d4e571162850b30db0321638f955b" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-answered-part.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-answered-part.json new file mode 100644 index 0000000..088ef41 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-answered-part.json @@ -0,0 +1,3634 @@ +{ + "format_version": 1, + "name": "choose-refused-answered-part", + "description": "Choosing on a part that already has a reading raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-mixed-fetch-raises", + "edit": "A choice of option 0 on part 0, which has a reading, follows the search." + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + }, + { + "op": "choose", + "part": 0, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3b0a506d6d2a43a0becd94837bafffa1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1", + "warnings": [], + "timing_ms": { + "total": 4692, + "by_step": { + "coverage": 0, + "extract": 1001 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 3475, + "by_step": { + "recall": 434, + "shape_arcs": 3, + "shape_probe_coverage": 4, + "shape_probe": 243, + "shape_groups": 3, + "shape_labels": 9, + "shape_admission": 0, + "shape": 893, + "bind": 1563, + "materialise": 9, + "answer": 381, + "options": 195 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 574, + "by_step": { + "recall": 380, + "shape_arcs": 1, + "shape_probe": 190, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 0, + "shape": 194 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "variable_not_resolved", + "category": "unresolved", + "message": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "complete": false, + "specs": [ + "spec_78d04fefc3b3f1ef71acd622957e4995" + ], + "gaps": [ + { + "part": 1, + "kind": "not_understood", + "options": 0 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-mention-names-two-parts.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-mention-names-two-parts.json new file mode 100644 index 0000000..398606a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-mention-names-two-parts.json @@ -0,0 +1,440 @@ +{ + "format_version": 1, + "name": "choose-refused-mention-names-two-parts", + "description": "Naming a part by \"Congo\", a word both parts' options mention, raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "search-two-parts-place-ambiguous", + "edit": "A choice of \"Congo [DRC]\" on part \"Congo\" follows the search." + }, + "call": [ + { + "op": "search", + "question": "Kenya's GDP, and ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "part": "Congo", + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "Kenya's GDP, and ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4a421114e5a2429284f5bb99860796e7" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "normalized_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4a421114e5a2429284f5bb99860796e7", + "warnings": [], + "timing_ms": { + "total": 1225, + "by_step": { + "coverage": 0, + "extract": 1221 + } + }, + "llm_usage": { + "input_tokens": 2256, + "output_tokens": 207, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + }, + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-choice.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-choice.json new file mode 100644 index 0000000..d87f7ad --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-choice.json @@ -0,0 +1,3703 @@ +{ + "format_version": 1, + "name": "choose-refused-no-choice", + "description": "Choosing on an answer in which no part awaits a choice raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "A choice of option 0 follows the search." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + }, + { + "op": "choose", + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "complete": true, + "specs": [ + "spec_774d6c001a6250aa67ca676ab067895e" + ], + "gaps": [] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-options.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-options.json new file mode 100644 index 0000000..80b86d3 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-no-options.json @@ -0,0 +1,210 @@ +{ + "format_version": 1, + "name": "choose-refused-no-options", + "description": "Choosing in a choice gap that offers no options raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The no_data part's options go, and a choice of option 0 follows the search." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 0 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-option-out-of-range.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-option-out-of-range.json new file mode 100644 index 0000000..f6878f5 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-option-out-of-range.json @@ -0,0 +1,2393 @@ +{ + "format_version": 1, + "name": "choose-refused-option-out-of-range", + "description": "Choosing candidate 3 of three raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-candidates-choose-fetch", + "edit": "A choice of candidate 3 follows the search." + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022" + }, + { + "op": "choose", + "option": 3 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d107dd88e50147378d54464bcdaf9695" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022", + "normalized_query": "GNI of Germany from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d107dd88e50147378d54464bcdaf9695", + "warnings": [], + "timing_ms": { + "total": 4075, + "by_step": { + "coverage": 0, + "extract": 1004 + } + }, + "llm_usage": { + "input_tokens": 7300, + "output_tokens": 300, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2799, + "by_step": { + "recall": 381, + "shape_arcs": 2, + "shape_probe_coverage": 1, + "shape_probe": 203, + "shape_groups": 18, + "shape_labels": 5, + "shape_admission": 0, + "shape": 1186, + "bind": 829, + "materialise": 217, + "answer": 186 + } + }, + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "definition": { + "schema_version": 1, + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "definition": { + "schema_version": 1, + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity per capita in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_c0f61f3ca3558aac184973441a67601e": [], + "spec_403a96317ee8b97f1d8569c71015e5ce": [], + "spec_d94656e5d53b7b6c6b0c683145a1cd98": [] + } + } + ], + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "candidates" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "candidates", + "sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-part-without-variable-text.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-part-without-variable-text.json new file mode 100644 index 0000000..87f0994 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-part-without-variable-text.json @@ -0,0 +1,4531 @@ +{ + "format_version": 1, + "name": "choose-refused-part-without-variable-text", + "description": "An identity entry carries its part's variable_text, so a part without one cannot be posted back and the choice raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-option-beside-definite", + "edit": "Part 0, the definite part, loses its variable_text." + }, + "call": [ + { + "op": "search", + "question": "GDP of sub-Saharan Africa, and debt of Kenya" + }, + { + "op": "choose", + "part": 1, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GDP of sub-Saharan Africa, and debt of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "42c8045fa5264f7ba7622ef7394703ec" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "normalized_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "42c8045fa5264f7ba7622ef7394703ec", + "warnings": [], + "timing_ms": { + "total": 4563, + "by_step": { + "coverage": 0, + "extract": 1204 + } + }, + "llm_usage": { + "input_tokens": 12972, + "output_tokens": 920, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "warnings": [], + "timing_ms": { + "total": 2905, + "by_step": { + "recall": 1, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 243, + "shape_groups": 19, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1228, + "bind": 1200, + "materialise": 180, + "answer": 6, + "options": 290 + } + }, + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Sub-Saharan Africa" + }, + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "asked": "sub-Saharan Africa", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "definition": { + "schema_version": 1, + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2859, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2859, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossValueAdded", + "label": "GrossValueAdded" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetDomesticProduction", + "label": "Net Domestic Production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetValueAdded", + "label": "Net Value Added" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinanceService", + "label": "Finance Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MOSPI_OtherService", + "label": "MOSPI Other Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TradeSector", + "label": "Trade Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialServices", + "label": "Financial Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Industry", + "label": "Industry" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Services", + "label": "Services" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "options": [ + { + "value": { + "ref": { + "ref": "NAICS/23", + "label": "Construction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/44-45", + "label": "Retail trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/53", + "label": "Real estate and rental and leasing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/22", + "label": "Utilities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/55", + "label": "Management of companies and enterprises" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/48-49", + "label": "Transportation and warehousing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/61", + "label": "Educational services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/51", + "label": "Information" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/42", + "label": "Wholesale trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/21", + "label": "Mining, quarrying, and oil and gas extraction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/11", + "label": "Agriculture, forestry, fishing and hunting" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/72", + "label": "Accommodation and food services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/52", + "label": "Finance and insurance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/54", + "label": "Professional, Scientific, and Technical Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/71", + "label": "Arts, entertainment, and recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/311-316_322-326", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/31-33", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/321_327-339", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/56", + "label": "Administrative and Support and Waste Management Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/62", + "label": "Health care and social assistance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/81", + "label": "Other services, except public administration" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/92", + "label": "Public administration" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "XAF", + "label": "XAF" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "equivalent_readings": [ + { + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "definition": { + "schema_version": 1, + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicProduction", + "measured_property": "valueAdded", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "currencyConversionBasis", + "binding": { + "state": "unbound" + } + }, + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + }, + { + "property": "productTaxBasis", + "binding": { + "state": "value", + "ref": "IncludingProductTaxes" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "CurrencyUSD" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicproduction_valueadded_measuredvalue_nominal", + "label": "Gross domestic product (GDP)", + "population_type": { + "ref": "EconomicProduction", + "label": "economic production" + }, + "measured_property": { + "ref": "valueAdded", + "label": "value added" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 2, + "member_digest": "ef9c4356618ed98aab762248e68799d78c74ad249a6041dad0e8a345c85ee02f", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "currencyConversionBasis" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1980", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2031, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 46 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2031, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1980, + "end_year": 2025 + }, + "licence": { + "label": "IMF Copyright and Usage" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + }, + "unit": { + "basis": "bound", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PurchasingPowerParityRate", + "label": "purchasing power parity rate" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_df3e3c939162b3cfe113d2d78d4b4986", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 2973, + "by_step": { + "recall": 495, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 190, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 983, + "bind": 1495 + } + }, + "rendered_sentence": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "role_not_resolved", + "category": "unresolved", + "message": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "entity_terms": [ + "sub-Saharan Africa", + "Kenya" + ], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "sub-Saharan Africa to Kenya", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "Kenya to sub-Saharan Africa", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "to" + }, + { + "text": "Kenya", + "role_text": "from" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "complete": false, + "specs": [ + "spec_3c3d4e571162850b30db0321638f955b" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-candidate-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-candidate-label.json new file mode 100644 index 0000000..a1c904f --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-candidate-label.json @@ -0,0 +1,2402 @@ +{ + "format_version": 1, + "name": "choose-refused-shared-candidate-label", + "description": "A label two candidates share matches several, so choosing by it raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-candidates-choose-fetch", + "edit": "Candidate 1 takes candidate 0's sentence plan, and the choice names their shared label." + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022" + }, + { + "op": "choose", + "option": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022." + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d107dd88e50147378d54464bcdaf9695" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022", + "normalized_query": "GNI of Germany from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d107dd88e50147378d54464bcdaf9695", + "warnings": [], + "timing_ms": { + "total": 4075, + "by_step": { + "coverage": 0, + "extract": 1004 + } + }, + "llm_usage": { + "input_tokens": 7300, + "output_tokens": 300, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2799, + "by_step": { + "recall": 381, + "shape_arcs": 2, + "shape_probe_coverage": 1, + "shape_probe": 203, + "shape_groups": 18, + "shape_labels": 5, + "shape_admission": 0, + "shape": 1186, + "bind": 829, + "materialise": 217, + "answer": 186 + } + }, + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "definition": { + "schema_version": 1, + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "definition": { + "schema_version": 1, + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity per capita in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_c0f61f3ca3558aac184973441a67601e": [], + "spec_403a96317ee8b97f1d8569c71015e5ce": [], + "spec_d94656e5d53b7b6c6b0c683145a1cd98": [] + } + } + ], + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "candidates" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "candidates", + "sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-label.json new file mode 100644 index 0000000..57c6ca8 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-shared-label.json @@ -0,0 +1,268 @@ +{ + "format_version": 1, + "name": "choose-refused-shared-label", + "description": "A label two options share matches several, so choosing by it raises InvalidRequestError with no request. The error describes the caller's choice, so it carries no trace id although the answer's response has one.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-place-one-part", + "edit": "The no_data part's second option takes the first one's label, and the search's response carries x-dfo-trace-id 55555555555555555555555555555555." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": "Congo [DRC]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "55555555555555555555555555555555" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "1ad25aff9f6a4ad7ac21922af623e5e9", + "warnings": [], + "timing_ms": { + "total": 1084, + "by_step": { + "coverage": 0, + "extract": 1082 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-two-choices.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-two-choices.json new file mode 100644 index 0000000..adaab80 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-two-choices.json @@ -0,0 +1,439 @@ +{ + "format_version": 1, + "name": "choose-refused-two-choices", + "description": "Choosing without naming a part when two parts await a choice raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "search-two-parts-place-ambiguous", + "edit": "A choice of option 0, naming no part, follows the search." + }, + "call": [ + { + "op": "search", + "question": "Kenya's GDP, and ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "Kenya's GDP, and ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4a421114e5a2429284f5bb99860796e7" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "normalized_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4a421114e5a2429284f5bb99860796e7", + "warnings": [], + "timing_ms": { + "total": 1225, + "by_step": { + "coverage": 0, + "extract": 1221 + } + }, + "llm_usage": { + "input_tokens": 2256, + "output_tokens": 207, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + }, + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-candidate-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-candidate-label.json new file mode 100644 index 0000000..42705ac --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-candidate-label.json @@ -0,0 +1,2393 @@ +{ + "format_version": 1, + "name": "choose-refused-unknown-candidate-label", + "description": "Choosing a candidate by a label no candidate has raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-candidates-choose-fetch", + "edit": "A choice of \"Germany's net lending\" follows the search." + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany from 2015 to 2022" + }, + { + "op": "choose", + "option": "Germany's net lending" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d107dd88e50147378d54464bcdaf9695" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany from 2015 to 2022", + "normalized_query": "GNI of Germany from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d107dd88e50147378d54464bcdaf9695", + "warnings": [], + "timing_ms": { + "total": 4075, + "by_step": { + "coverage": 0, + "extract": 1004 + } + }, + "llm_usage": { + "input_tokens": 7300, + "output_tokens": 300, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 2799, + "by_step": { + "recall": 381, + "shape_arcs": 2, + "shape_probe_coverage": 1, + "shape_probe": 203, + "shape_groups": 18, + "shape_labels": 5, + "shape_admission": 0, + "shape": 1186, + "bind": 829, + "materialise": 217, + "answer": 186 + } + }, + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "definition": { + "schema_version": 1, + "spec_id": "spec_c0f61f3ca3558aac184973441a67601e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's primary income for gross of fixed capital consumption, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "definition": { + "schema_version": 1, + "spec_id": "spec_403a96317ee8b97f1d8569c71015e5ce", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "definition": { + "schema_version": 1, + "spec_id": "spec_d94656e5d53b7b6c6b0c683145a1cd98", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross national income based on purchasing power parity per capita in international dollars, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_c0f61f3ca3558aac184973441a67601e": [], + "spec_403a96317ee8b97f1d8569c71015e5ce": [], + "spec_d94656e5d53b7b6c6b0c683145a1cd98": [] + } + } + ], + "rendered_sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "candidates" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "candidates", + "sentence": "3 readings. Germany's primary income for gross of fixed capital consumption. OECD DAC1 · 2015 to 2022 · Current US dollars. Germany's gross national income based on purchasing power parity in international dollars. World Development Indicators · 2015 to 2022. Germany's gross national income based on purchasing power parity per capita in international dollars. World Development Indicators · 2015 to 2022.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-label.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-label.json new file mode 100644 index 0000000..30cab4d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-label.json @@ -0,0 +1,268 @@ +{ + "format_version": 1, + "name": "choose-refused-unknown-label", + "description": "Choosing an option by a label no option has raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "A choice of \"Congo [Nowhere]\" follows the search." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "choose", + "option": "Congo [Nowhere]" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-part.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-part.json new file mode 100644 index 0000000..cb42e8a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-part.json @@ -0,0 +1,3634 @@ +{ + "format_version": 1, + "name": "choose-refused-unknown-part", + "description": "Naming a part by words that are neither a part's variable text nor a word its options mention raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-mixed-fetch-raises", + "edit": "A choice of option 0 on part \"rainfall\" follows the search." + }, + "call": [ + { + "op": "search", + "question": "debt service of Kenya and the price of tea in Kenya" + }, + { + "op": "choose", + "part": "rainfall", + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "debt service of Kenya and the price of tea in Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3b0a506d6d2a43a0becd94837bafffa1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "debt service of Kenya and the price of tea in Kenya", + "normalized_query": "debt service of Kenya and the price of tea in Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3b0a506d6d2a43a0becd94837bafffa1", + "warnings": [], + "timing_ms": { + "total": 4692, + "by_step": { + "coverage": 0, + "extract": 1001 + } + }, + "llm_usage": { + "input_tokens": 5885, + "output_tokens": 606, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "debt service", + "warnings": [], + "timing_ms": { + "total": 3475, + "by_step": { + "recall": 434, + "shape_arcs": 3, + "shape_probe_coverage": 4, + "shape_probe": 243, + "shape_groups": 3, + "shape_labels": 9, + "shape_admission": 0, + "shape": 893, + "bind": 1563, + "materialise": 9, + "answer": 381, + "options": 195 + } + }, + "restatement": { + "variable_text": "debt service", + "entities": [ + { + "text": "Kenya" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every creditor", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "definition": { + "schema_version": 1, + "spec_id": "spec_78d04fefc3b3f1ef71acd622957e4995", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "ServicingPayment" + } + }, + { + "property": "financingResource", + "binding": { + "state": "unbound" + } + }, + { + "property": "guaranteeStatus", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsConcessionality", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsCreditorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "idsDebtorType", + "binding": { + "state": "unbound" + } + }, + { + "property": "includesIMFCredit", + "binding": { + "state": "unbound" + } + }, + { + "property": "maturityBand", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_by_role", + "label": "Debt service on external debt", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financingResource", + "guaranteeStatus", + "idsDebtorType", + "idsCreditorType", + "idsConcessionality", + "includesIMFCredit", + "maturityBand" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1970", + "end": "2024" + }, + "source_codes": [ + { + "provenance": "provenance/WorldBankInternationalDebtStatistics", + "code": "DT.TDS.DECT.CD" + } + ] + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 55, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 55 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 55, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 1970, + "end_year": 2024 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "ServicingPayment", + "label": "servicing payment" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PublicOrPubliclyGuaranteed", + "label": "public or publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "NotPubliclyGuaranteed", + "label": "not publicly guaranteed" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSDebtorTypePS", + "label": "public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeGG", + "label": "general government (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypeOPS", + "label": "other public sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSDebtorTypePrivateSector", + "label": "private sector (IDS debtor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 56, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSCreditorTypePROP", + "label": "other private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePBND", + "label": "bondholders (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 31, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypePRVT", + "label": "private creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeOFFT", + "label": "official creditors (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 55, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "IDSCreditorTypeMLAT", + "label": "multilateral (IDS creditor type)" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IDSConcessional", + "label": "concessional (IDS concessionality)" + }, + "value_kind": "enum_value" + }, + "served_rows": 118, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "options": [ + { + "value": { + "ref": { + "ref": "WithoutIMFCredit", + "label": "without IMF credit" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "options": [ + { + "value": { + "ref": { + "ref": "LongTermMaturity", + "label": "long-term maturity" + }, + "value_kind": "enum_value" + }, + "served_rows": 63, + "served_rows_exact": false + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "measurementMethod", + "options": [ + { + "value": { + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Estimated", + "label": "estimated" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/WorldBankInternationalDebtStatistics" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "ServicingPayment", + "label": "servicing payment" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financingResource", + "label": "financing resource" + }, + "label": "financing resource" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "guaranteeStatus", + "label": "guarantee status" + }, + "label": "guarantee status" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsDebtorType", + "label": "IDS debtor type" + }, + "label": "IDS debtor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsCreditorType", + "label": "IDS creditor type" + }, + "label": "IDS creditor type" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "idsConcessionality", + "label": "IDS concessionality" + }, + "label": "IDS concessionality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "includesIMFCredit", + "label": "includes IMF credit" + }, + "label": "includes IMF credit" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "maturityBand", + "label": "maturity band" + }, + "label": "maturity band" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1981, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1981, + "base_year_max": 2025 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1980, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES" + } + } + } + } + }, + { + "variable_text": "price of tea", + "warnings": [], + "timing_ms": { + "total": 574, + "by_step": { + "recall": 380, + "shape_arcs": 1, + "shape_probe": 190, + "shape_groups": 0, + "shape_labels": 0, + "shape_admission": 0, + "shape": 194 + } + }, + "rendered_sentence": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "variable_not_resolved", + "category": "unresolved", + "message": "Could not match \"price of tea\" to a supported indicator. Try a different wording or a related indicator.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "external debt service", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " owed to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "all creditors", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financingResource", + "binding_ref": "how:financingResource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "guaranteeStatus", + "binding_ref": "how:guaranteeStatus", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsConcessionality", + "binding_ref": "how:idsConcessionality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsCreditorType", + "binding_ref": "how:idsCreditorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "idsDebtorType", + "binding_ref": "how:idsDebtorType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "includesIMFCredit", + "binding_ref": "how:includesIMFCredit", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "maturityBand", + "binding_ref": "how:maturityBand", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1970 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Bank International Debt Statistics (IDS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every creditor", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "No match for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "slot", + "text": "price of tea", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ". Try a different wording or a related indicator.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Kenya's external debt service owed to all creditors, 1970 to 2024. Current US dollars · World Bank International Debt Statistics (IDS). Assumed: every creditor. No match for price of tea. Try a different wording or a related indicator.", + "complete": false, + "specs": [ + "spec_78d04fefc3b3f1ef71acd622957e4995" + ], + "gaps": [ + { + "part": 1, + "kind": "not_understood", + "options": 0 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-status.json b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-status.json new file mode 100644 index 0000000..ecb8542 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/choose-refused-unknown-status.json @@ -0,0 +1,4522 @@ +{ + "format_version": 1, + "name": "choose-refused-unknown-status", + "description": "A part of a status the client does not know, with no restatement, cannot be posted back, so the choice raises InvalidRequestError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "choose-option-beside-definite", + "edit": "Part 0 takes the status \"deferred\" and loses its restatement." + }, + "call": [ + { + "op": "search", + "question": "GDP of sub-Saharan Africa, and debt of Kenya" + }, + { + "op": "choose", + "part": 1, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GDP of sub-Saharan Africa, and debt of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "42c8045fa5264f7ba7622ef7394703ec" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "normalized_query": "GDP of sub-Saharan Africa, and debt of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "42c8045fa5264f7ba7622ef7394703ec", + "warnings": [], + "timing_ms": { + "total": 4563, + "by_step": { + "coverage": 0, + "extract": 1204 + } + }, + "llm_usage": { + "input_tokens": 12972, + "output_tokens": 920, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 2905, + "by_step": { + "recall": 1, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 243, + "shape_groups": 19, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1228, + "bind": 1200, + "materialise": 180, + "answer": 6, + "options": 290 + } + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "asked": "sub-Saharan Africa", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own." + } + ], + "assumptions": [], + "status": "deferred", + "spec": { + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "definition": { + "schema_version": 1, + "spec_id": "spec_3c3d4e571162850b30db0321638f955b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2859, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2859, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossValueAdded", + "label": "GrossValueAdded" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetDomesticProduction", + "label": "Net Domestic Production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetValueAdded", + "label": "Net Value Added" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinanceService", + "label": "Finance Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MOSPI_OtherService", + "label": "MOSPI Other Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TradeSector", + "label": "Trade Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialServices", + "label": "Financial Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Industry", + "label": "Industry" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Services", + "label": "Services" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "options": [ + { + "value": { + "ref": { + "ref": "NAICS/23", + "label": "Construction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/44-45", + "label": "Retail trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/53", + "label": "Real estate and rental and leasing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/22", + "label": "Utilities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/55", + "label": "Management of companies and enterprises" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/48-49", + "label": "Transportation and warehousing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/61", + "label": "Educational services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/51", + "label": "Information" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/42", + "label": "Wholesale trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/21", + "label": "Mining, quarrying, and oil and gas extraction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/11", + "label": "Agriculture, forestry, fishing and hunting" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/72", + "label": "Accommodation and food services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/52", + "label": "Finance and insurance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/54", + "label": "Professional, Scientific, and Technical Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/71", + "label": "Arts, entertainment, and recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/311-316_322-326", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/31-33", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/321_327-339", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/56", + "label": "Administrative and Support and Waste Management Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/62", + "label": "Health care and social assistance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/81", + "label": "Other services, except public administration" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/92", + "label": "Public administration" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "XAF", + "label": "XAF" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "equivalent_readings": [ + { + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "definition": { + "schema_version": 1, + "spec_id": "spec_22cfb22f6e4a1cff1584eaf03285ce73", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicProduction", + "measured_property": "valueAdded", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "currencyConversionBasis", + "binding": { + "state": "unbound" + } + }, + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + }, + { + "property": "productTaxBasis", + "binding": { + "state": "value", + "ref": "IncludingProductTaxes" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "CurrencyUSD" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicproduction_valueadded_measuredvalue_nominal", + "label": "Gross domestic product (GDP)", + "population_type": { + "ref": "EconomicProduction", + "label": "economic production" + }, + "measured_property": { + "ref": "valueAdded", + "label": "value added" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 2, + "member_digest": "ef9c4356618ed98aab762248e68799d78c74ad249a6041dad0e8a345c85ee02f", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BWA", + "label": "Botswana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CMR", + "label": "Cameroon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CPV", + "label": "Cape Verde" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GAB", + "label": "Gabon" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GHA", + "label": "Ghana" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MUS", + "label": "Mauritius" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NAM", + "label": "Namibia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SWZ", + "label": "Swaziland" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SYC", + "label": "Seychelles" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZAF", + "label": "South Africa" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZWE", + "label": "Zimbabwe" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "currencyConversionBasis" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1980", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "entity_groups": { + "observationAbout": { + "ref": "SubSaharanAfrica", + "label": "Sub-Saharan Africa", + "entity_type": "UNGeoRegion" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2031, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 48 + }, + { + "label": "observations", + "count": 46 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 2031, + "rows_exact": true, + "series": 48, + "window": { + "start_year": 1980, + "end_year": 2025 + }, + "licence": { + "label": "IMF Copyright and Usage" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + }, + "unit": { + "basis": "bound", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PurchasingPowerParityRate", + "label": "purchasing power parity rate" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [], + "trace": { + "resolved_entities": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "resolved_sources": [ + { + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BWA", + "label": "Botswana" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast" + }, + { + "ref": "country/CMR", + "label": "Cameroon" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/CPV", + "label": "Cape Verde" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GAB", + "label": "Gabon" + }, + { + "ref": "country/GHA", + "label": "Ghana" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea" + }, + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MUS", + "label": "Mauritius" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NAM", + "label": "Namibia" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe" + }, + { + "ref": "country/SWZ", + "label": "Swaziland" + }, + { + "ref": "country/SYC", + "label": "Seychelles" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/ZAF", + "label": "South Africa" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_df3e3c939162b3cfe113d2d78d4b4986", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BWA", + "country/CAF", + "country/CIV", + "country/CMR", + "country/COD", + "country/COG", + "country/COM", + "country/CPV", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GAB", + "country/GHA", + "country/GIN", + "country/GMB", + "country/GNB", + "country/GNQ", + "country/KEN", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MOZ", + "country/MRT", + "country/MUS", + "country/MWI", + "country/NAM", + "country/NER", + "country/NGA", + "country/RWA", + "country/SEN", + "country/SLE", + "country/SOM", + "country/SSD", + "country/STP", + "country/SWZ", + "country/SYC", + "country/TCD", + "country/TGO", + "country/TZA", + "country/UGA", + "country/ZAF", + "country/ZMB", + "country/ZWE" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 2973, + "by_step": { + "recall": 495, + "shape_arcs": 1, + "shape_probe_coverage": 3, + "shape_probe": 190, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 0, + "shape": 983, + "bind": 1495 + } + }, + "rendered_sentence": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "role_not_resolved", + "category": "unresolved", + "message": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "entity_terms": [ + "sub-Saharan Africa", + "Kenya" + ], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "sub-Saharan Africa to Kenya", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "sub-Saharan Africa", + "Kenya" + ], + "label": "Kenya to sub-Saharan Africa", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Sub-Saharan Africa", + "role_text": "to" + }, + { + "text": "Kenya", + "role_text": "from" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 48 countries in Sub-Saharan Africa", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for sub-Saharan Africa. This shows the countries in it, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. GDP in the 48 countries in Sub-Saharan Africa, 1960 to 2025. Current US dollars · World Development Indicators. You asked for sub-Saharan Africa. This shows the countries in it, each on its own. Could not tell who is giving and who is receiving among \"sub-Saharan Africa\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "unknown", + "options": 0 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "choice_invalid", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-frame-several-readings.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-frame-several-readings.json new file mode 100644 index 0000000..8d9f926 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-frame-several-readings.json @@ -0,0 +1,9901 @@ +{ + "format_version": 1, + "name": "fetch-frame-several-readings", + "description": "The frame layout holds one reading, so fetching an answer with two members in it raises InvalidRequestError before any build.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-several-readings-folded", + "edit": "The fetch of the answer asks for layout \"frame\", and the exchanges after the search go." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya" + }, + { + "op": "fetch", + "layout": "frame" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3ceef86d0eac49fa96380d3340878cf1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya", + "normalized_query": "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "3ceef86d0eac49fa96380d3340878cf1", + "warnings": [], + "timing_ms": { + "total": 5613, + "by_step": { + "coverage": 0, + "extract": 1020 + } + }, + "llm_usage": { + "input_tokens": 15731, + "output_tokens": 1021, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements for health", + "warnings": [], + "timing_ms": { + "total": 3674, + "by_step": { + "recall": 773, + "shape_arcs": 0, + "shape_probe_coverage": 11, + "shape_probe": 224, + "shape_groups": 26, + "shape_labels": 8, + "shape_admission": 0, + "shape": 1251, + "bind": 1411, + "materialise": 115, + "answer": 15, + "options": 109 + } + }, + "restatement": { + "variable_text": "ODA disbursements for health", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 545, + "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + } + ] + }, + "expansion": { + "added": [ + { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + { + "ref": "CRSPurposeCode12110", + "label": "health policy and administrative management" + }, + { + "ref": "CRSPurposeCode12181", + "label": "medical education and training" + }, + { + "ref": "CRSPurposeCode12182", + "label": "medical research" + }, + { + "ref": "CRSPurposeCode12191", + "label": "medical service" + }, + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + { + "ref": "CRSPurposeCode12230", + "label": "basic health infrastructure" + }, + { + "ref": "CRSPurposeCode12240", + "label": "basic nutrition" + }, + { + "ref": "CRSPurposeCode12250", + "label": "infectious disease control" + }, + { + "ref": "CRSPurposeCode12261", + "label": "health education" + }, + { + "ref": "CRSPurposeCode12262", + "label": "malaria control" + }, + { + "ref": "CRSPurposeCode12263", + "label": "tuberculosis control" + }, + { + "ref": "CRSPurposeCode12264", + "label": "COVID-19 control" + }, + { + "ref": "CRSPurposeCode12281", + "label": "health personnel development" + }, + { + "ref": "CRSPurposeCode12310", + "label": "general noncommunicable disease control" + }, + { + "ref": "CRSPurposeCode12320", + "label": "tobacco use control" + }, + { + "ref": "CRSPurposeCode12330", + "label": "control of harmful use of alcohol and drugs" + }, + { + "ref": "CRSPurposeCode12340", + "label": "mental health and well-being promotion" + }, + { + "ref": "CRSPurposeCode12350", + "label": "other noncommunicable disease prevention and treatment" + }, + { + "ref": "CRSPurposeCode12382", + "label": "research for noncommunicable disease prevention and control" + } + ] + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 108, + "member_count_exact": true, + "served_count": 545, + "data_date_range": { + "start": "1997", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "breadth", + "has_data": true, + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 12 + }, + { + "label": "variables", + "count": 51 + } + ] + }, + "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 104, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 21, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 83, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 111, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 84, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE", + "label": "scholarship and student cost in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 38, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 819, + "served_rows": 19, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 315, + "served_rows": 19, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 6, + "served_rows": 82, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 108, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 3, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode111", + "label": "unspecified-level education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 78, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode112", + "label": "basic education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 77, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode113", + "label": "upper secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 5, + "served_rows": 69, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode114", + "label": "post-secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 4, + "served_rows": 94, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance420", + "label": "debt instrument" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance420", + "member_count": 4620, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 512, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + }, + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_b438dc000255d174bcc13eb675e603f7", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 512, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_e348565295de394da8ddaa23ec5fa475", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 519, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 2, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 105 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 3 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 7, + "undeclared_count": 19, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 27 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 21 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 16 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 15 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 8 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + }, + { + "variable_text": "ODA disbursements for education", + "warnings": [ + { + "code": "binding_folded", + "severity": "info", + "message": "'ODA disbursements for education' resolved to the same shape as an earlier part; folded into that part's spec." + } + ], + "timing_ms": { + "total": 3542, + "by_step": { + "recall": 791, + "shape_arcs": 0, + "shape_probe_coverage": 2, + "shape_probe": 240, + "shape_groups": 39, + "shape_labels": 5, + "shape_admission": 1, + "shape": 1008, + "bind": 1505, + "materialise": 146, + "answer": 13, + "options": 79 + } + }, + "restatement": { + "variable_text": "ODA disbursements for education", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "definition": { + "schema_version": 1, + "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 545, + "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + } + ] + }, + "expansion": { + "added": [ + { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + { + "ref": "CRSPurposeCode12110", + "label": "health policy and administrative management" + }, + { + "ref": "CRSPurposeCode12181", + "label": "medical education and training" + }, + { + "ref": "CRSPurposeCode12182", + "label": "medical research" + }, + { + "ref": "CRSPurposeCode12191", + "label": "medical service" + }, + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + { + "ref": "CRSPurposeCode12230", + "label": "basic health infrastructure" + }, + { + "ref": "CRSPurposeCode12240", + "label": "basic nutrition" + }, + { + "ref": "CRSPurposeCode12250", + "label": "infectious disease control" + }, + { + "ref": "CRSPurposeCode12261", + "label": "health education" + }, + { + "ref": "CRSPurposeCode12262", + "label": "malaria control" + }, + { + "ref": "CRSPurposeCode12263", + "label": "tuberculosis control" + }, + { + "ref": "CRSPurposeCode12264", + "label": "COVID-19 control" + }, + { + "ref": "CRSPurposeCode12281", + "label": "health personnel development" + }, + { + "ref": "CRSPurposeCode12310", + "label": "general noncommunicable disease control" + }, + { + "ref": "CRSPurposeCode12320", + "label": "tobacco use control" + }, + { + "ref": "CRSPurposeCode12330", + "label": "control of harmful use of alcohol and drugs" + }, + { + "ref": "CRSPurposeCode12340", + "label": "mental health and well-being promotion" + }, + { + "ref": "CRSPurposeCode12350", + "label": "other noncommunicable disease prevention and treatment" + }, + { + "ref": "CRSPurposeCode12382", + "label": "research for noncommunicable disease prevention and control" + } + ] + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 108, + "member_count_exact": true, + "served_count": 545, + "data_date_range": { + "start": "1997", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "breadth", + "has_data": true, + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 12 + }, + { + "label": "variables", + "count": 51 + } + ] + }, + "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 104, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 21, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 83, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 136, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 111, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 84, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 27, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE", + "label": "scholarship and student cost in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 38, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 819, + "served_rows": 19, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 315, + "served_rows": 19, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode121", + "label": "general health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 6, + "served_rows": 82, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 108, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode123", + "label": "noncommunicable disease" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode120", + "member_count": 3, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode111", + "label": "unspecified-level education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 78, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode112", + "label": "basic education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 6, + "served_rows": 77, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode113", + "label": "upper secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 5, + "served_rows": 69, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode114", + "label": "post-secondary education" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode110", + "member_count": 4, + "served_rows": 94, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 501, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance420", + "label": "debt instrument" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 11, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance420", + "member_count": 4620, + "served_rows": 11, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 512, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/KEN", + "label": "Kenya" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + }, + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_b438dc000255d174bcc13eb675e603f7", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 512, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_e348565295de394da8ddaa23ec5fa475", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120" + ] + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/KEN" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 519, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 2, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 105 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 3 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 7, + "undeclared_count": 19, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 27 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 21 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 16 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 15 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 8 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2025 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2025 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "KES", + "origin": "EUR" + } + } + } + } + }, + { + "variable_text": "GDP", + "warnings": [ + { + "code": "direction_discarded", + "severity": "warn", + "message": "Germany was named as the provider; this shape reports the place as its own subject, so the direction was dropped." + }, + { + "code": "direction_discarded", + "severity": "warn", + "message": "Kenya was named as the recipient; this shape reports the place as its own subject, so the direction was dropped." + } + ], + "timing_ms": { + "total": 3536, + "by_step": { + "recall": 778, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 277, + "shape_groups": 24, + "shape_labels": 5, + "shape_admission": 1, + "shape": 973, + "bind": 1109, + "materialise": 1, + "answer": 210, + "options": 465 + } + }, + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [ + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Germany", + "text": "You named Germany as a provider. This measure has no providers, so this shows the place itself." + }, + { + "code": "direction_discarded", + "binding_ref": "where:", + "asked": "Kenya", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "definition": { + "schema_version": 1, + "spec_id": "spec_f8dea3052d1ef6ba5667628815d1a663", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + }, + { + "property": "economicSector", + "binding": { + "state": "unbound" + } + }, + { + "property": "naics", + "binding": { + "state": "unbound" + } + }, + { + "property": "schoolGradeLevel", + "binding": { + "state": "unbound" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "USDollar" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_nominal", + "label": "Nominal gross domestic product", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 65, + "member_digest": "73519eeb75639bdae33042fc844830cd46becc08e4f9122dfcd0886e9875f657", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "economicSector", + "naics", + "schoolGradeLevel" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 41, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 132, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 66 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 132, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1960, + "end_year": 2025 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "bound", + "ref": "USDollar", + "label": "USDollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossValueAdded", + "label": "GrossValueAdded" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetDomesticProduction", + "label": "Net Domestic Production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NetValueAdded", + "label": "Net Value Added" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "AgricultureForestryFishingSector", + "label": "Agriculture,Forestry and Fishing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ConstructionSector", + "label": "Construction Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricityGasSteamAirConditionSupply", + "label": "Electric Gas Steam Air Condition Supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinanceService", + "label": "Finance Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MOSPI_OtherService", + "label": "MOSPI Other Service" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ManufacturingSector", + "label": "Manufacturing Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "MiningQuarrying", + "label": "Mining quarrying" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TradeSector", + "label": "Trade Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AccommodationAndFoodSector", + "label": "Accommodation and food sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AdministrativeAndSupportServices", + "label": "Administrative and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AgriculturalSupportActivities", + "label": "Agricultural support activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Agriculture", + "label": "Agriculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AirTransportAndSupportServices", + "label": "Air transport and support services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AllEconomicActivities", + "label": "All economic activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "AnimalProduction", + "label": "Animal production" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ArtsEntertainmentRecreation", + "label": "Arts entertainment recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Education", + "label": "Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ElectricitySupply", + "label": "Electricity supply" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "EmployerHouseholdActivities", + "label": "Employer household activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialActivities", + "label": "FinancialActivities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialAndInsuranceActivities", + "label": "Financial and insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialIntermediationServicesIndirectlyMeasured", + "label": "Financial intermediation services indirectly measured" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FishingAquaculture", + "label": "Fishing aquaculture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FoodBeveragesTobaccoManufacture", + "label": "Food beverages tobacco manufacture" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ForestryLogging", + "label": "Forestry logging" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "HumanHealthAndSocialWork", + "label": "Human health and social work" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InformationAndCommunication", + "label": "Information and communication" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "InsuranceActivities", + "label": "Insurance activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "LandTransport", + "label": "Land transport" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherManufacturingAndRepair", + "label": "Other manufacturing and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherServiceSector", + "label": "Other service sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "OtherTransportPostalCourierActivities", + "label": "Other transport postal courier activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProductTaxes", + "label": "Product taxes" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "ProfessionalScientificTechnicalActivities", + "label": "Professional scientific technical activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublicAdministrationAndDefence", + "label": "Public administration and defence" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PublishingBroadcastingInformationActivities", + "label": "Publishing Broadcasting Information Activities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "RealEstate", + "label": "Real estate" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Telecommunications", + "label": "Telecommunications" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "TransportStorageSector", + "label": "Transport and Storage" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WaterSupplySewerageWasteManagement", + "label": "Water supply sewerage waste management" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "WholesaleRetailTradeAndRepair", + "label": "Wholesale retail trade and repair" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "BankingAndInsuranceSector", + "label": "Banking And Insurance Sector" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Construction", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "FinancialServices", + "label": "Financial Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Industry", + "label": "Industry" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Services", + "label": "Services" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "options": [ + { + "value": { + "ref": { + "ref": "NAICS/23", + "label": "Construction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/44-45", + "label": "Retail trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/53", + "label": "Real estate and rental and leasing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/22", + "label": "Utilities" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/55", + "label": "Management of companies and enterprises" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/48-49", + "label": "Transportation and warehousing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/61", + "label": "Educational services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/51", + "label": "Information" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/42", + "label": "Wholesale trade" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/21", + "label": "Mining, quarrying, and oil and gas extraction" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/11", + "label": "Agriculture, forestry, fishing and hunting" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/72", + "label": "Accommodation and food services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/52", + "label": "Finance and insurance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/54", + "label": "Professional, Scientific, and Technical Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/71", + "label": "Arts, entertainment, and recreation" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/311-316_322-326", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/31-33", + "label": "Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/321_327-339", + "label": "Durable Goods Manufacturing" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/56", + "label": "Administrative and Support and Waste Management Services" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/62", + "label": "Health care and social assistance" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/81", + "label": "Other services, except public administration" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NAICS/92", + "label": "Public administration" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "options": [ + { + "value": { + "ref": { + "ref": "HigherSecondaryEducation", + "label": "Higher Secondary Education" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PrePrimaryAndPrimaryEducation", + "label": "PrePrimary and Primary" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "SecondaryEducation", + "label": "SecondaryEducation" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "USDollar", + "label": "USDollar" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "Euro", + "label": "Euro" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "NationalCurrency", + "label": "NationalCurrency" + }, + "value_kind": "enum_value" + } + }, + { + "value": { + "ref": { + "ref": "PurchasingPowerStandard", + "label": "PurchasingPowerStandard" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossDomesticProduction", + "label": "GrossDomesticProduction" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "economicSector", + "label": "economicSector" + }, + "label": "economic sector" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "naics", + "label": "naics" + }, + "label": "naics" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "schoolGradeLevel", + "label": "schoolGradeLevel" + }, + "label": "school grade level" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "equivalent_readings": [ + { + "spec_id": "spec_2a65bb3dc1332b16173c540e3392b139", + "definition": { + "schema_version": 1, + "spec_id": "spec_2a65bb3dc1332b16173c540e3392b139", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicProduction", + "measured_property": "valueAdded", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "currencyConversionBasis", + "binding": { + "state": "unbound" + } + }, + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + }, + { + "property": "productTaxBasis", + "binding": { + "state": "value", + "ref": "IncludingProductTaxes" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + }, + "facets": { + "unit": { + "state": "value", + "ref": "CurrencyUSD" + } + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicproduction_valueadded_measuredvalue_nominal", + "label": "Gross domestic product (GDP)", + "population_type": { + "ref": "EconomicProduction", + "label": "economic production" + }, + "measured_property": { + "ref": "valueAdded", + "label": "value added" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 2, + "member_digest": "ef9c4356618ed98aab762248e68799d78c74ad249a6041dad0e8a345c85ee02f", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "currencyConversionBasis" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "1980", + "end": "2025" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 92, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 46 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "download": { + "rows": 92, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 1980, + "end_year": 2025 + }, + "licence": { + "label": "IMF Copyright and Usage" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + }, + "unit": { + "basis": "bound", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "PurchasingPowerParityRate", + "label": "purchasing power parity rate" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/IMFWorldEconomicOutlook", + "label": "IMF World Economic Outlook (WEO)", + "source": { + "ref": "source/InternationalMonetaryFund", + "label": "International Monetary Fund (IMF)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/IMFWorldEconomicOutlook" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "productTaxBasis", + "label": "product tax basis" + }, + "label": "product tax basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "IncludingProductTaxes", + "label": "including taxes on products" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "currencyConversionBasis", + "label": "currency conversion basis" + }, + "label": "currency conversion basis" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAccommodationFoodServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSFinanceInsurance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSMiningQuarryingOilGasExtraction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSProfessionalScientificTechnicalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSWholesaleTrade_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826", + "dc/zz6gwv838v9w" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "measure_label_axes": [], + "measure_axis_values": [], + "related_group": { + "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", + "label": "Economic Activity With Activity Source = Gross Domestic Production" + }, + "related_measures": [ + { + "stat_var": { + "ref": "GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "label": "Gross domestic product growth rate" + }, + "definition": { + "schema_version": 1, + "spec_id": "spec_4535d09baf2bdffef7c19c7796e96687", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "growthRate" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossDomesticProduction" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + } + ] + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS). GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators. You named Germany as a provider. This measure has no providers, so this shows the place itself. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Kenya", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/KEN" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "education and health", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1997 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource", + "axis:populationType", + "axis:measuredProperty", + "axis:statType" + ], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "economicSector", + "binding_ref": "how:economicSector", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "naics", + "binding_ref": "how:naics", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "schoolGradeLevel", + "binding_ref": "how:schoolGradeLevel", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "1960 to 2025", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 2 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": "You named Germany as a provider. This measure has no providers, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + }, + { + "kind": "text", + "text": "You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 2 + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Kenya for education and health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS). GDP in Germany and Kenya, 1960 to 2025. Current US dollars · World Development Indicators. You named Germany as a provider. This measure has no providers, so this shows the place itself. You named Kenya as a recipient. This measure has no recipients, so this shows the place itself.", + "complete": true, + "specs": [ + "spec_25f482395c5d012ec278118f38dff29c", + "spec_f8dea3052d1ef6ba5667628815d1a663" + ], + "gaps": [] + } + }, + { + "error": { + "class": "InvalidRequestError", + "code": "invalid_argument", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-null-member.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-null-member.json new file mode 100644 index 0000000..790290f --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-null-member.json @@ -0,0 +1,4542 @@ +{ + "format_version": 1, + "name": "fetch-null-member", + "description": "An optional member that admits null may be left out or served as null; a client reads both as null, and neither changes the outcome. The recording and this record carry the two forms of the status column's distinct.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "The manifest's status column distinct flips between left out and served as null." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true, + "distinct": null + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "d14640239a5a4ffa8f113140eb5b23a0" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "58cc82a3079f4e4298eb45378fdf10db" + }, + "body_file": "answer-definite-fetch.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "complete": true, + "specs": [ + "spec_774d6c001a6250aa67ca676ab067895e" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [], + "search_warning": false + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-partial-nothing-answered.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-partial-nothing-answered.json new file mode 100644 index 0000000..3741eb3 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-partial-nothing-answered.json @@ -0,0 +1,268 @@ +{ + "format_version": 1, + "name": "fetch-partial-nothing-answered", + "description": "A partial fetch of an answer in which no part has a reading raises IncompleteAnswerError with no request.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "A partial fetch of the answer follows the search." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "fetch", + "partial": true + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "error": { + "class": "IncompleteAnswerError", + "code": "answer_incomplete", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-artifact-unlisted.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-artifact-unlisted.json new file mode 100644 index 0000000..ad6974c --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-artifact-unlisted.json @@ -0,0 +1,871 @@ +{ + "format_version": 1, + "name": "fetch-ref-artifact-unlisted", + "description": "A ref member whose digest the snapshot manifest does not list asks the file selector in the ref member's own rendering, and bytes that hash to the stored digest give the dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-ref", + "edit": "The snapshot manifest's artifacts no longer list the ref's digest, and the file selector redirects to the parent's signed download." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "62f3f94d818743f89b2e3047c3e737f6" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8", + "rendering": { + "format": "frame" + }, + "bytes": 4764, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/file?format=parquet&bundle=false" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "7dbbbcc2a7bd4cc7a0c5d806e55cc20f" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "81e177c259cc4bca8e9ea1bceb977f3d" + }, + "body_file": "fetch-ref.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-file-selector.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-file-selector.json new file mode 100644 index 0000000..77fd42f --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-file-selector.json @@ -0,0 +1,906 @@ +{ + "format_version": 1, + "name": "fetch-ref-expired-file-selector", + "description": "When the files route refuses artifact_expired, the client asks the file selector for the stored version in the ref's rendering and downloads the file it redirects to, which hashes to the stored digest.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-ref", + "edit": "The files route refuses 410 artifact_expired, and the file selector redirects to the parent's signed download." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "62f3f94d818743f89b2e3047c3e737f6" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8", + "rendering": { + "format": "frame" + }, + "bytes": 4764, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 410, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/artifact_expired", + "title": "Gone", + "status": 410, + "detail": "Every listable artifact of this version aged out of the working tier unpinned.", + "code": "artifact_expired", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/file?format=parquet&bundle=false" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "7dbbbcc2a7bd4cc7a0c5d806e55cc20f" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "81e177c259cc4bca8e9ea1bceb977f3d" + }, + "body_file": "fetch-ref.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-newer-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-newer-version.json new file mode 100644 index 0000000..9647083 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-newer-version.json @@ -0,0 +1,911 @@ +{ + "format_version": 1, + "name": "fetch-ref-expired-newer-version", + "description": "A rebuild that answers another content_version cannot return the stored one: the client raises VersionUnavailableError with the snapshot's artifact_expired code and the rebuilt version as the newest, and downloads nothing.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "As fetch-ref-expired-rebuild-same-version, with the rebuild answering cv_11111111111111111111111111111111." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 410, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/artifact_expired", + "title": "Gone", + "status": 410, + "detail": "Every listable artifact of this version aged out of the working tier unpinned.", + "code": "artifact_expired", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_11111111111111111111111111111111", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + } + ], + "expect": [ + { + "error": { + "class": "VersionUnavailableError", + "code": "artifact_expired", + "trace_id": "00000000000000000000000000000000", + "newest_version": "cv_11111111111111111111111111111111" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-not-reproducible.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-not-reproducible.json new file mode 100644 index 0000000..05ec78d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-not-reproducible.json @@ -0,0 +1,263 @@ +{ + "format_version": 1, + "name": "fetch-ref-expired-not-reproducible", + "description": "When the stored version has expired and the build is refused, the client asks the versions route for the newest version alone with limit=1, and raises VersionUnavailableError with the snapshot's artifact_expired code and that version as the newest.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-ref-newest-version", + "edit": "A fetch of a ref to the listed version, its unreached artifact digest all zeros, whose snapshot refuses 410 artifact_expired and whose rebuild refuses 422 member_not_resolvable, comes before the parent's versions exchange." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 410, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/artifact_expired", + "title": "Gone", + "status": 410, + "detail": "Every listable artifact of this version aged out of the working tier unpinned.", + "code": "artifact_expired", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 422, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/member_not_resolvable", + "title": "Unprocessable Entity", + "status": 422, + "detail": "The spec's variable no longer resolves in the graph.", + "code": "member_not_resolvable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/versions?limit=1" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e5ff992e18a94c18866838012ff15862" + }, + "json": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "versions": [ + { + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "base_content_version": null, + "rendering": "plain", + "groupby": null + } + ], + "next_cursor": null, + "complete": true + } + } + } + ], + "expect": [ + { + "error": { + "class": "VersionUnavailableError", + "code": "artifact_expired", + "trace_id": "00000000000000000000000000000000", + "newest_version": "cv_b92d94774702c7f05f2075d0b03dd756" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-other-spec.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-other-spec.json new file mode 100644 index 0000000..8f94217 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-other-spec.json @@ -0,0 +1,910 @@ +{ + "format_version": 1, + "name": "fetch-ref-expired-rebuild-other-spec", + "description": "A rebuild of a ref's spec must answer the ref's spec_id as well as its content_version: a manifest of another spec_id raises ContractError contract_violation, as a snapshot of another spec_id does, and the client downloads nothing.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "As fetch-ref-expired-rebuild-same-version, with the rebuild's manifest naming spec_22222222222222222222222222222222." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 410, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/artifact_expired", + "title": "Gone", + "status": 410, + "detail": "Every listable artifact of this version aged out of the working tier unpinned.", + "code": "artifact_expired", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_22222222222222222222222222222222", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "90ec74fce6534d0d8e4142b0e1355782" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-same-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-same-version.json new file mode 100644 index 0000000..0f9d343 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-expired-rebuild-same-version.json @@ -0,0 +1,975 @@ +{ + "format_version": 1, + "name": "fetch-ref-expired-rebuild-same-version", + "description": "A ref whose snapshot refuses artifact_expired builds its spec again with the ref's rendering; the build answers the same content_version, so the client downloads it and returns the ref's member, its parts and sentence kept, with no Search call.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "A ref to the fetched member, whose snapshot route refuses 410 artifact_expired; the parent's build, files and download follow." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 410, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/artifact_expired", + "title": "Gone", + "status": 410, + "detail": "Every listable artifact of this version aged out of the working tier unpinned.", + "code": "artifact_expired", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "d14640239a5a4ffa8f113140eb5b23a0" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "58cc82a3079f4e4298eb45378fdf10db" + }, + "body_file": "answer-definite-fetch.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-newest-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-newest-version.json new file mode 100644 index 0000000..7402be9 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-newest-version.json @@ -0,0 +1,123 @@ +{ + "format_version": 1, + "name": "fetch-ref-newest-version", + "description": "The newest stored version of a spec is the one the versions route lists first, so the client asks for it alone with limit=1. The route needs no key.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:07:25Z" + }, + "call": [ + { + "op": "newest_version", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/versions?limit=1" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e5ff992e18a94c18866838012ff15862" + }, + "json": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "versions": [ + { + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "base_content_version": null, + "rendering": "plain", + "groupby": null + } + ], + "next_cursor": null, + "complete": true + } + } + } + ], + "expect": [ + { + "newest_version": { + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused-twice.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused-twice.json new file mode 100644 index 0000000..840eeb3 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused-twice.json @@ -0,0 +1,869 @@ +{ + "format_version": 1, + "name": "fetch-ref-signed-url-refused-twice", + "description": "A download asks the files route once and fetches the signed URL once, then asks the route once more and fetches again, with no wait; a second refused fetch raises ServerError download_failed.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-ref", + "edit": "The signed download answers 403, and so does the one the files route names when asked again." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "62f3f94d818743f89b2e3047c3e737f6" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8", + "rendering": { + "format": "frame" + }, + "bytes": 4764, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "7dbbbcc2a7bd4cc7a0c5d806e55cc20f" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 403, + "headers": { + "content-type": "application/xml" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "7dbbbcc2a7bd4cc7a0c5d806e55cc20f" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 403, + "headers": { + "content-type": "application/xml" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ServerError", + "code": "download_failed", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused.json new file mode 100644 index 0000000..b81b811 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-signed-url-refused.json @@ -0,0 +1,909 @@ +{ + "format_version": 1, + "name": "fetch-ref-signed-url-refused", + "description": "A signed storage URL that refuses is never retried: the client asks the files route for a fresh redirect and downloads from that, reaching the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-ref", + "edit": "The signed download answers 403 once, and the files route is asked again." + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "62f3f94d818743f89b2e3047c3e737f6" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8", + "rendering": { + "format": "frame" + }, + "bytes": 4764, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "7dbbbcc2a7bd4cc7a0c5d806e55cc20f" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 403, + "headers": { + "content-type": "application/xml" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "7dbbbcc2a7bd4cc7a0c5d806e55cc20f" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "81e177c259cc4bca8e9ea1bceb977f3d" + }, + "body_file": "fetch-ref.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-unknown-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-unknown-version.json new file mode 100644 index 0000000..e27e9b3 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref-unknown-version.json @@ -0,0 +1,139 @@ +{ + "format_version": 1, + "name": "fetch-ref-unknown-version", + "description": "Fetching a ref whose content_version the server never built ends at the snapshot route's 404 snapshot_not_found, which raises NotFoundError with no build: an unknown version is not an expired one.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:50Z" + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_00000000000000000000000000000000", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_00000000000000000000000000000000" + }, + "response": { + "status": 404, + "headers": { + "content-type": "application/problem+json", + "x-dfo-trace-id": "30da7e671a9246f8b1c399fe77e0ca9c" + }, + "json": { + "type": "/codes/snapshot_not_found", + "title": "Snapshot Not Found", + "status": 404, + "detail": "'spec_774d6c001a6250aa67ca676ab067895e' has no version at content_version 'cv_00000000000000000000000000000000'", + "code": "snapshot_not_found", + "trace_id": "30da7e671a9246f8b1c399fe77e0ca9c", + "capability_version": "dset_88fecfec3c5b89d1", + "retryable": false + } + } + } + ], + "expect": [ + { + "error": { + "class": "NotFoundError", + "code": "snapshot_not_found", + "trace_id": "30da7e671a9246f8b1c399fe77e0ca9c" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.json new file mode 100644 index 0000000..007e89a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.json @@ -0,0 +1,885 @@ +{ + "format_version": 1, + "name": "fetch-ref", + "description": "Fetching a ref with the cache off reads the stored version through the snapshot route, then the files route at the artifact url whose digest the ref stores, and returns the ref's member with its stored parts and sentence and no build or Search call.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:50Z" + }, + "call": [ + { + "op": "fetch", + "ref": { + "format_version": 1, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "artifact": { + "digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "format": "parquet", + "bundle": false + } + } + } + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "62f3f94d818743f89b2e3047c3e737f6" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8", + "rendering": { + "format": "frame" + }, + "bytes": 4764, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:ac65501b1aef56a9caaadf063eb0390e8d816198384081e2c1645b04816693b8" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "7dbbbcc2a7bd4cc7a0c5d806e55cc20f" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "81e177c259cc4bca8e9ea1bceb977f3d" + }, + "body_file": "fetch-ref.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.parquet new file mode 100644 index 0000000..63e4b1c Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-ref.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-renamed-strict-field.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-renamed-strict-field.json new file mode 100644 index 0000000..cdf2c56 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-renamed-strict-field.json @@ -0,0 +1,4475 @@ +{ + "format_version": 1, + "name": "fetch-renamed-strict-field", + "description": "A manifest without content_version, a strict field, raises ContractError on the build response, before any download.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "The build's manifest names content_version contentVersion, and the exchanges after it go." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + }, + "contentVersion": "cv_b92d94774702c7f05f2075d0b03dd756" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "complete": true, + "specs": [ + "spec_774d6c001a6250aa67ca676ab067895e" + ], + "gaps": [] + } + }, + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "90ec74fce6534d0d8e4142b0e1355782" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-retry-after-504.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-retry-after-504.json new file mode 100644 index 0000000..571bc2d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-retry-after-504.json @@ -0,0 +1,4644 @@ +{ + "format_version": 1, + "name": "fetch-retry-after-504", + "description": "A synchronous build cut off at the server's limit answers a retryable 504 timeout; the client waits the first backoff, 0.5 seconds, builds once more and reaches the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "A 504 timeout with retryable true answers the first build." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 504, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/timeout", + "title": "Gateway Timeout", + "status": 504, + "detail": "The build passed its 120 s limit.", + "code": "timeout", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "d14640239a5a4ffa8f113140eb5b23a0" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "58cc82a3079f4e4298eb45378fdf10db" + }, + "body_file": "answer-definite-fetch.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "complete": true, + "specs": [ + "spec_774d6c001a6250aa67ca676ab067895e" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [], + "search_warning": false, + "retry_waits": [ + 0.5 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-503-then-504.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-503-then-504.json new file mode 100644 index 0000000..f7dafde --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-503-then-504.json @@ -0,0 +1,1138 @@ +{ + "format_version": 1, + "name": "fetch-spec-503-then-504", + "description": "A 504 that cuts off the first retry is the first cut-off, so the build is posted once more, the second of its two retries, after waits of 0.5 and 1 seconds, and reaches the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "A 503 service_unavailable answers the build, and a 504 timeout its first retry." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 504, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/timeout", + "title": "Gateway Timeout", + "status": 504, + "detail": "The build passed its 120 s limit.", + "code": "timeout", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [], + "retry_waits": [ + 0.5, + 1.0 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-retry-after.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-retry-after.json new file mode 100644 index 0000000..a9bedd9 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-retry-after.json @@ -0,0 +1,1036 @@ +{ + "format_version": 1, + "name": "fetch-spec-504-retry-after", + "description": "A build cut off by a 504 that carries Retry-After is posted once more after the Retry-After seconds, not the backoff, and reaches the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "A 504 timeout with retryable true and Retry-After 5 answers the build." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 504, + "headers": { + "content-type": "application/problem+json", + "retry-after": "5" + }, + "json": { + "type": "/codes/timeout", + "title": "Gateway Timeout", + "status": 504, + "detail": "The build passed its 120 s limit.", + "code": "timeout", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [], + "retry_waits": [ + 5.0 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-then-503.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-then-503.json new file mode 100644 index 0000000..7f82896 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-then-503.json @@ -0,0 +1,306 @@ +{ + "format_version": 1, + "name": "fetch-spec-504-then-503", + "description": "After a 504 cut-off the build is posted once more only, so the 503 that answers that post raises its ServerError although one retry of the two is left.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "A 504 timeout answers the build, and a 503 service_unavailable its one retry." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 504, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/timeout", + "title": "Gateway Timeout", + "status": 504, + "detail": "The build passed its 120 s limit.", + "code": "timeout", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + } + ], + "expect": [ + { + "error": { + "class": "ServerError", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "retry_waits": [ + 0.5 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-twice.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-twice.json new file mode 100644 index 0000000..22f9d24 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-504-twice.json @@ -0,0 +1,306 @@ +{ + "format_version": 1, + "name": "fetch-spec-504-twice", + "description": "A synchronous build cut off twice is retried once only: the second 504 raises the timeout code's ServerError.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "A 504 timeout with retryable true answers the build and its one retry." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 504, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/timeout", + "title": "Gateway Timeout", + "status": 504, + "detail": "The build passed its 120 s limit.", + "code": "timeout", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 504, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/timeout", + "title": "Gateway Timeout", + "status": 504, + "detail": "The build passed its 120 s limit.", + "code": "timeout", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + } + ], + "expect": [ + { + "error": { + "class": "ServerError", + "code": "timeout", + "trace_id": "00000000000000000000000000000000", + "retry_waits": [ + 0.5 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-async-build.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-async-build.json new file mode 100644 index 0000000..8313d2b --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-async-build.json @@ -0,0 +1,1220 @@ +{ + "format_version": 1, + "name": "fetch-spec-async-build", + "description": "Fetching a spec whose build answers 202 polls the operation: it waits the 202's retry_after_ms, then each poll's, backing off from 1 to 8 seconds when a poll gives none, and downloads the done manifest's file.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "The mint and result steps become one fetch of the spec, which makes the same exchanges." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "1df7b03572044eedaa412f6d2ad6b91f" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "b5b2e2d98a4047be98aea852117381c7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "686111d592f3451e8c55691d91a66663" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1517, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "9acc0caab7e143d38b3ecbfbcd225707" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1900, + "progress": { + "rows_written": 16734, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "22c08bbaa1384833bd92f8dd9cc6312d" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2377, + "progress": { + "rows_written": 64341, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "227de800033b4185ae9b958d3fa2cec7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2973, + "progress": { + "rows_written": 106324, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "4", + "x-dfo-trace-id": "3197d4d8b5094857afb9bbd14c49fcb0" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 3719, + "progress": { + "rows_written": 108798, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "29f271852cc04f1a8b287274f53105b6" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2018 + } + } + }, + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "prepared_at": "2026-10-21T13:06:08Z", + "coverage": { + "rows": 108798, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 238, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 7 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 108798 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:09.616741+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 913395, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + { + "artifact_digest": "sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93", + "rendering": { + "statistics": "series" + }, + "bytes": 967921, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93" + } + ], + "series_count": 21017, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 238 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 7 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 143 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 141 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:09.573841Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted", + "x-dfo-trace-id": "155fa981459c464482aea52657f99e8b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "228feaabf1f3473cad055088084dc378" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 108798, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5, + 1.5, + 1.5, + 1.5, + 1.517, + 1.9, + 2.377, + 2.973, + 3.719 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-capability-unavailable.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-capability-unavailable.json new file mode 100644 index 0000000..f5495bf --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-capability-unavailable.json @@ -0,0 +1,199 @@ +{ + "format_version": 1, + "name": "fetch-spec-capability-unavailable", + "description": "A well-formed build that asks for a rendering this deployment does not enable refuses 501 capability_unavailable, which raises InvalidRequestError, since the caller asks for another rendering, and makes no further request.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-frame-layout", + "edit": "A 501 capability_unavailable answers the build." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "layout": "frame" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false, + "layout": "frame" + } + } + }, + "response": { + "status": 501, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/capability_unavailable", + "title": "Not Implemented", + "status": 501, + "detail": "This deployment does not enable the frame layout.", + "code": "capability_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + } + ], + "expect": [ + { + "error": { + "class": "InvalidRequestError", + "code": "capability_unavailable", + "trace_id": "00000000000000000000000000000000" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.bin b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.bin new file mode 100644 index 0000000..7941e55 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.bin @@ -0,0 +1 @@ +Not the stored file. diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.json new file mode 100644 index 0000000..e8d5f61 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-digest-mismatch.json @@ -0,0 +1,921 @@ +{ + "format_version": 1, + "name": "fetch-spec-digest-mismatch", + "description": "Bytes that do not hash to the artifact's digest ask the files route for a fresh redirect once; a second mismatch raises ServerError digest_mismatch.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The signed download serves other bytes, and the files route is asked once more for the same." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-digest-mismatch.bin" + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-digest-mismatch.bin" + } + } + ], + "expect": [ + { + "error": { + "class": "ServerError", + "code": "digest_mismatch", + "trace_id": null + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-empty-narrowing.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-empty-narrowing.json new file mode 100644 index 0000000..36e8750 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-empty-narrowing.json @@ -0,0 +1,932 @@ +{ + "format_version": 1, + "name": "fetch-spec-empty-narrowing", + "description": "An empty entities or facets map narrows nothing, so the build posts no scope, as a fetch that names neither does.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The fetch names entities {} and facets {}." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "entities": {}, + "facets": {} + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.json new file mode 100644 index 0000000..019164b --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.json @@ -0,0 +1,4949 @@ +{ + "format_version": 1, + "name": "fetch-spec-entity-dropped", + "description": "Fetching a two-role spec with entities binding origin to null posts input.scope.entities with origin dropped and destination kept, and the build answers a new spec_id bound to destination alone.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:36Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "entities": { + "origin": null + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "scope": { + "entities": { + "destination": [ + "country/NGA" + ] + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "65233075c02f4a259e853322a41a615e" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_4c228c73be6c18efd0939eabb3b3c456", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + }, + "content_version": "cv_1868d697e8e7d56da6a83740a940c2e5", + "prepared_at": "2026-10-21T13:05:38Z", + "coverage": { + "rows": 309, + "dimensions": [ + { + "label": "financingProvider", + "count": 25, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 30 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 33 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 19 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 149 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 12 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 65 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 23 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:38.830186+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:da9aa46394801d54e23b886528b98b609d8fda2ed46a2eb9e365575ee73ddf3a", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 13341, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:38.797066+00:00", + "tier": "working", + "url": "/api/datasets/spec_4c228c73be6c18efd0939eabb3b3c456/cv_1868d697e8e7d56da6a83740a940c2e5/files/sha256:da9aa46394801d54e23b886528b98b609d8fda2ed46a2eb9e365575ee73ddf3a" + }, + { + "artifact_digest": "sha256:ffd0e9eaabfc35d3113188c82648ce0bf809307a01a024b52b0baa133ef63d18", + "rendering": { + "statistics": "series" + }, + "bytes": 9074, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:38.797066+00:00", + "tier": "working", + "url": "/api/datasets/spec_4c228c73be6c18efd0939eabb3b3c456/cv_1868d697e8e7d56da6a83740a940c2e5/files/sha256:ffd0e9eaabfc35d3113188c82648ce0bf809307a01a024b52b0baa133ef63d18" + } + ], + "series_count": 58, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 10 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 25 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 30 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 25, + "covered": 18 + }, + "missing": [ + { + "ref": "EuropeanUnionInstitutions", + "label": "European Union institutions" + }, + { + "ref": "Gavi", + "label": "Gavi, the Vaccine Alliance" + }, + { + "ref": "GlobalFund", + "label": "Global Fund" + }, + { + "ref": "InternationalDevelopmentAssociation", + "label": "International Development Association" + }, + { + "ref": "UnitedNationsChildrensFund", + "label": "United Nations Children's Fund" + }, + { + "ref": "UnitedNationsDevelopmentProgramme", + "label": "United Nations Development Programme" + }, + { + "ref": "WorldHealthOrganization", + "label": "World Health Organization" + } + ], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 25, + "covered": 18 + }, + "missing": [ + { + "ref": "EuropeanUnionInstitutions", + "label": "European Union institutions" + }, + { + "ref": "Gavi", + "label": "Gavi, the Vaccine Alliance" + }, + { + "ref": "GlobalFund", + "label": "Global Fund" + }, + { + "ref": "InternationalDevelopmentAssociation", + "label": "International Development Association" + }, + { + "ref": "UnitedNationsChildrensFund", + "label": "United Nations Children's Fund" + }, + { + "ref": "UnitedNationsDevelopmentProgramme", + "label": "United Nations Development Programme" + }, + { + "ref": "WorldHealthOrganization", + "label": "World Health Organization" + } + ], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 25, + "covered": 25 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 25, + "covered": 25 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 25, + "covered": 25 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 30 + } + ] + }, + { + "index": "stat_var", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 25 + } + ] + }, + { + "index": "financingProvider", + "columns": "stat_var", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 30 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "stat_var", + "distinct": 10 + } + ] + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 25 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "stat_var", + "distinct": 10 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:38.797229Z" + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "variable_text": "dataset", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d1929c3ccdc84f0ab8eb63b2aa22bfce" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d1929c3ccdc84f0ab8eb63b2aa22bfce", + "warnings": [], + "timing_ms": { + "total": 139, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "dataset", + "warnings": [ + { + "code": "role_scope_defaulted", + "severity": "warn", + "message": "no provider was named; the answer was resolved across every provider with data." + } + ], + "timing_ms": { + "total": 99, + "by_step": { + "validate": 2, + "walk": 68, + "reread_arcs": 1, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 2, + "bind": 0, + "where_places": 0, + "materialise": 12, + "answer": 11, + "options": 3 + } + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every provider", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_4c228c73be6c18efd0939eabb3b3c456", + "definition": { + "schema_version": 1, + "spec_id": "spec_4c228c73be6c18efd0939eabb3b3c456", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 10, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 309, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 23 + }, + { + "label": "variables", + "count": 10 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 20, + "series": 20, + "role_counts": { + "financingProvider": 16, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 20, + "series": 20, + "role_counts": { + "financingProvider": 16, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 18, + "series": 18, + "role_counts": { + "financingProvider": 16, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 17, + "series": 17, + "role_counts": { + "financingProvider": 15, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 309, + "rows_exact": true, + "series": 58, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 56, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 22, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 33, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB04", + "label": "basket fund and pooled funding" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 709, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 172, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 172, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 14, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 12, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE", + "label": "scholarship and student cost in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityE", + "member_count": 819, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 1321, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 286, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 286, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance420", + "label": "debt instrument" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 23, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance420", + "member_count": 4620, + "served_rows": 23, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 309, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow21", + "label": "non-export credit official flow" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 3798, + "served_rows": 12, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow30", + "label": "private development finance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 2711, + "served_rows": 42, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [ + { + "role": "origin", + "options": [], + "truncated": true, + "source": "observed" + } + ], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross ODA disbursements to Nigeria from 25 providers for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "25 providers", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_b7f316e86e3564e5bd58d7dbf04e411a", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 310, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_4344b54b17658b054f6af7db6eeabb46", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 284, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 14, + "undeclared_count": 2, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 5 + }, + { + "value": { + "ref": "CRSCooperationModalityA02", + "label": "sector budget support" + }, + "count": 2 + }, + { + "value": { + "ref": "CRSCooperationModalityB04", + "label": "basket fund and pooled funding" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB031", + "label": "contribution to multi-donor and multi-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB032", + "label": "contribution to multi-donor and single-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB033", + "label": "contribution to single-donor funding mechanism or earmarked contribution to a specific funding window or geographical location" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityA01", + "label": "general budget support" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityG01", + "label": "other administrative cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + }, + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 5, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 14 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 4 + }, + { + "value": { + "ref": "CRSTypeOfFinance510", + "label": "common equity" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance210", + "label": "interest subsidy" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance520", + "label": "share in collective investment vehicle" + }, + "count": 1 + } + ] + } + ], + "role_axis_facts": [ + { + "role": "origin", + "member_count": 25, + "members_available": true + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN" + } + } + } + } + } + ], + "rendered_sentence": "Gross ODA disbursements to Nigeria from 25 providers for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS). Assumed: every provider.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "25 providers", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every provider", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_4c228c73be6c18efd0939eabb3b3c456/cv_1868d697e8e7d56da6a83740a940c2e5/files/sha256:da9aa46394801d54e23b886528b98b609d8fda2ed46a2eb9e365575ee73ddf3a" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ada9aa46394801d54e23b886528b98b609d8fda2ed46a2eb9e365575ee73ddf3a?X-Goog-Signature=redacted", + "x-dfo-trace-id": "6a47e9cde4fb494da9fa8aa1973d2e55" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ada9aa46394801d54e23b886528b98b609d8fda2ed46a2eb9e365575ee73ddf3a?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "74cf2f077d1e4218a74b4913461d26d0" + }, + "body_file": "fetch-spec-entity-dropped.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 309, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_4c228c73be6c18efd0939eabb3b3c456", + "content_version": "cv_1868d697e8e7d56da6a83740a940c2e5", + "sentence": "Gross ODA disbursements to Nigeria from 25 providers for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.parquet new file mode 100644 index 0000000..bc5adcd Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-dropped.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.json new file mode 100644 index 0000000..cef8b0b --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.json @@ -0,0 +1,4680 @@ +{ + "format_version": 1, + "name": "fetch-spec-entity-rebound", + "description": "Fetching a two-role spec with entities naming only origin posts input.scope.entities with origin replaced and destination kept from the spec's definition, because the server's scope.entities replaces the spec's whole entity binding. The build answers a new spec_id bound to both roles.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:35Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "entities": { + "origin": [ + "country/FRA" + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "scope": { + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/FRA" + ] + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "c62c3fdb28e14a459e5111ba626dd898" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_1ee5f6648c9e46ddcc806fa0034bb6a8", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/FRA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + }, + "content_version": "cv_7947f7ed828c0b23b8df4c601d463c09", + "prepared_at": "2026-10-21T13:05:36Z", + "coverage": { + "rows": 2, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 2 + } + ], + "window": { + "kind": "all", + "start_year": 2019, + "end_year": 2021, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 2019, + "end_year": 2021, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:36.077679+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:3f42e71fd7f6c7dde3c7294e7eb1eb6525ab0748650d41948ba054114025b297", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9059, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:36.037061+00:00", + "tier": "working", + "url": "/api/datasets/spec_1ee5f6648c9e46ddcc806fa0034bb6a8/cv_7947f7ed828c0b23b8df4c601d463c09/files/sha256:3f42e71fd7f6c7dde3c7294e7eb1eb6525ab0748650d41948ba054114025b297" + }, + { + "artifact_digest": "sha256:36616ef68df33904cc9dfa37fb145d8fd1563b1b3701710dcd8d9e04ed50d79a", + "rendering": { + "statistics": "series" + }, + "bytes": 5628, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:36.037061+00:00", + "tier": "working", + "url": "/api/datasets/spec_1ee5f6648c9e46ddcc806fa0034bb6a8/cv_7947f7ed828c0b23b8df4c601d463c09/files/sha256:36616ef68df33904cc9dfa37fb145d8fd1563b1b3701710dcd8d9e04ed50d79a" + } + ], + "series_count": 2, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 2 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 2 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 3, + "cells": 6 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 3, + "cells": 6 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:36.037239Z" + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "variable_text": "dataset", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/FRA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "a59d23d595924f7695a10d939638112b" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "a59d23d595924f7695a10d939638112b", + "warnings": [], + "timing_ms": { + "total": 674, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "dataset", + "warnings": [], + "timing_ms": { + "total": 652, + "by_step": { + "validate": 2, + "walk": 76, + "reread_arcs": 1, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 3, + "bind": 0, + "where_places": 359, + "materialise": 10, + "answer": 200, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_1ee5f6648c9e46ddcc806fa0034bb6a8", + "definition": { + "schema_version": 1, + "spec_id": "spec_1ee5f6648c9e46ddcc806fa0034bb6a8", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/FRA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 2, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "2019", + "end": "2021" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/FRA", + "label": "France", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 1 + }, + { + "label": "variables", + "count": 2 + } + ] + }, + "headline": { + "year": 2021, + "year_named": false, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2021, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2020, + "observations": 0, + "series": 0, + "role_counts": {} + }, + { + "year": 2019, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 2, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2019, + "end_year": 2021 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 976, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 14, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 2, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 2, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow21", + "label": "non-export credit official flow" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 3798, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "France's gross ODA disbursements to Nigeria for basic health care, 2019 to 2021. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "France", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/FRA" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2019 to 2021", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/FRA", + "label": "France" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_f7d465ce303ba2d1d4b15ebf98faa7a7", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/FRA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 2, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_d93d68e62c537fb8b05cc0add6ce5f9d", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/FRA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 2, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 14, + "undeclared_count": 2, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 5 + }, + { + "value": { + "ref": "CRSCooperationModalityA02", + "label": "sector budget support" + }, + "count": 2 + }, + { + "value": { + "ref": "CRSCooperationModalityB04", + "label": "basket fund and pooled funding" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB031", + "label": "contribution to multi-donor and multi-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB032", + "label": "contribution to multi-donor and single-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB033", + "label": "contribution to single-donor funding mechanism or earmarked contribution to a specific funding window or geographical location" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityA01", + "label": "general budget support" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityG01", + "label": "other administrative cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + }, + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 5, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 14 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 4 + }, + { + "value": { + "ref": "CRSTypeOfFinance510", + "label": "common equity" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance210", + "label": "interest subsidy" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance520", + "label": "share in collective investment vehicle" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2019, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 2019, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2020, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2019, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2019, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2019, + "end_year": 2021 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "France's gross ODA disbursements to Nigeria for basic health care, 2019 to 2021. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "France", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/FRA" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2019 to 2021", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_1ee5f6648c9e46ddcc806fa0034bb6a8/cv_7947f7ed828c0b23b8df4c601d463c09/files/sha256:3f42e71fd7f6c7dde3c7294e7eb1eb6525ab0748650d41948ba054114025b297" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A3f42e71fd7f6c7dde3c7294e7eb1eb6525ab0748650d41948ba054114025b297?X-Goog-Signature=redacted", + "x-dfo-trace-id": "b94e3c7dd2fe45fdb401820e689a9098" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A3f42e71fd7f6c7dde3c7294e7eb1eb6525ab0748650d41948ba054114025b297?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "9e5771b287d64ab18a4a6c98c484570a" + }, + "body_file": "fetch-spec-entity-rebound.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 2, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_1ee5f6648c9e46ddcc806fa0034bb6a8", + "content_version": "cv_7947f7ed828c0b23b8df4c601d463c09", + "sentence": "France's gross ODA disbursements to Nigeria for basic health care, 2019 to 2021. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.parquet new file mode 100644 index 0000000..bd415ce Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-entity-rebound.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-no-content.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-no-content.json new file mode 100644 index 0000000..68fd02f --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-no-content.json @@ -0,0 +1,879 @@ +{ + "format_version": 1, + "name": "fetch-spec-files-route-no-content", + "description": "A files route that answers a status other than 302, 200 or a refusal raises ContractError unexpected_response, with that response's trace id, and the client fetches nothing.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The files route answers 204 with no location, and the exchanges after it go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 204, + "headers": { + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "unexpected_response", + "trace_id": "0911c16fb4824a499926e24a34069b40" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-serves-file.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-serves-file.json new file mode 100644 index 0000000..26184e1 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-serves-file.json @@ -0,0 +1,917 @@ +{ + "format_version": 1, + "name": "fetch-spec-files-route-serves-file", + "description": "A files route that answers 200 holds the file as its body, which the client hashes against the artifact's digest with no further request.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The files route answers 200 with the file the signed URL served, and the signed fetch goes." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 200, + "headers": { + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40", + "content-type": "application/vnd.apache.parquet" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-temporary-redirect.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-temporary-redirect.json new file mode 100644 index 0000000..dfff971 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-files-route-temporary-redirect.json @@ -0,0 +1,880 @@ +{ + "format_version": 1, + "name": "fetch-spec-files-route-temporary-redirect", + "description": "A files route redirects with 302 only: a 307, as any 3xx other than 302, raises ContractError unexpected_response, and the client does not follow its location.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The files route answers 307 with the parent's location, and the exchanges after it go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 307, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "unexpected_response", + "trace_id": "0911c16fb4824a499926e24a34069b40" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-foreign-artifact-url.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-foreign-artifact-url.json new file mode 100644 index 0000000..a03a5ef --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-foreign-artifact-url.json @@ -0,0 +1,867 @@ +{ + "format_version": 1, + "name": "fetch-spec-foreign-artifact-url", + "description": "An artifact url on an origin other than the API's raises ContractError contract_violation before any request for the file.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "Every artifact url of the build's manifest becomes absolute on https://downloads.example.com, and the exchanges after the build go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "https://downloads.example.com/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "https://downloads.example.com/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "72492035a830492dba11a29fa89ded8c" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.json new file mode 100644 index 0000000..0d57005 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.json @@ -0,0 +1,923 @@ +{ + "format_version": 1, + "name": "fetch-spec-frame-layout", + "description": "Fetching a spec with layout=\"frame\" posts the frame rendering as the build's options and downloads the manifest's frame artifact, matched on format, bundle and its frame layout, with no Search call.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:43Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "layout": "frame" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false, + "layout": "frame" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "af873def265e411b9585fc943fb0100c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "all", + "origin": "default", + "end_year": 2024, + "start_year": 1995 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:f4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": "frame" + }, + "bytes": 5627, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:43.579496+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:f4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:f4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Af4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104?X-Goog-Signature=redacted", + "x-dfo-trace-id": "25bfaeae90ea43c18f512793a6337084" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Af4026e80af4b8683d3bb86645ab3aca83dff75cd03fdd4c73ec54ba638922104?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "09f4c71dbf614e94af950a8b6b5bf453" + }, + "body_file": "fetch-spec-frame-layout.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingRecipient", + "time_period", + "value", + "unit", + "measurementMethod", + "provenance", + "status", + "stat_var_crsCooperationModality", + "stat_var_crsPurpose", + "stat_var_crsTypeOfFinance", + "stat_var_crsTypeOfFlow" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.parquet new file mode 100644 index 0000000..d0a17d0 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-frame-layout.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.json new file mode 100644 index 0000000..b834d70 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.json @@ -0,0 +1,5322 @@ +{ + "format_version": 1, + "name": "fetch-spec-group-narrowed", + "description": "Fetching a spec whose destination is the least developed countries group with window=(2020, 2023) answers a new spec_id. The identity entry that asks Search for its sentence carries the spec's entity_groups whole, since a window leaves every role's binding as it was, and the sentence names the group.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:39Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "definition": { + "schema_version": 1, + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross disbursements to the 44 Least Developed Countries for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "entity_groups": { + "destination": { + "label": "Least Developed Countries", + "group_id": "groups/UN.LDC" + } + } + }, + "window": [ + 2020, + 2023 + ] + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "definition": { + "schema_version": 1, + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "scope": { + "window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "903874dd8766447b9b7a28b1e2b8fe3e" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_f04936b8378cde70bc6289ac1e45ee9b", + "identity": { + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "identity_version": "spec1", + "requested_window": { + "end_year": 2023, + "kind": "range", + "start_year": 2020 + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + }, + "content_version": "cv_daec84e443d4e1b37291242d90fc8fa8", + "prepared_at": "2026-10-21T13:05:46Z", + "coverage": { + "rows": 170, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 43, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023, + "origin": "query" + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023, + "origin": "query" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 170 + } + ], + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_count": 1, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDDAC2A", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:46.277911+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for country/TUV." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:5674a67518081e6d1d436a9ba9ebd4cfe59bb8aec561571b3264522dda1d72b0", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 8716, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:46.238607+00:00", + "tier": "working", + "url": "/api/datasets/spec_f04936b8378cde70bc6289ac1e45ee9b/cv_daec84e443d4e1b37291242d90fc8fa8/files/sha256:5674a67518081e6d1d436a9ba9ebd4cfe59bb8aec561571b3264522dda1d72b0" + }, + { + "artifact_digest": "sha256:78ad78b09dcc0d40e50f5804d66f3399fa6b851ae4b4ac48b27ce5a6f2124ef0", + "rendering": { + "statistics": "series" + }, + "bytes": 7768, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:46.238607+00:00", + "tier": "working", + "url": "/api/datasets/spec_f04936b8378cde70bc6289ac1e45ee9b/cv_daec84e443d4e1b37291242d90fc8fa8/files/sha256:78ad78b09dcc0d40e50f5804d66f3399fa6b851ae4b4ac48b27ce5a6f2124ef0" + } + ], + "series_count": 43, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 43 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 43, + "covered": 43 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 43, + "covered": 42 + }, + "missing": [ + { + "ref": "country/SSD", + "label": "South Sudan" + } + ], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 43, + "covered": 43 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 43, + "covered": 43 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 43, + "covered": 43 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingRecipient", + "columns": "time_period", + "state": "available", + "width": 5, + "cells": 215 + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "available", + "width": 44, + "cells": 176 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:46.238569Z" + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "variable_text": "dataset", + "identity": { + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "identity_version": "spec1", + "requested_window": { + "end_year": 2023, + "kind": "range", + "start_year": 2020 + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + }, + "entity_groups": { + "destination": { + "label": "Least Developed Countries", + "group_id": "groups/UN.LDC" + } + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "b8966b28738645a9b9ec81828c8e7020" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "b8966b28738645a9b9ec81828c8e7020", + "warnings": [], + "timing_ms": { + "total": 1831, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "dataset", + "warnings": [], + "timing_ms": { + "total": 1803, + "by_step": { + "validate": 0, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 1776, + "bind": 0, + "where_places": 0, + "materialise": 14, + "answer": 7, + "options": 1 + } + }, + "operations": [], + "departures": [ + { + "code": "entity_unavailable", + "binding_ref": "where:", + "text": "The data holds no values for 1 of the 44 Least Developed Countries." + }, + { + "code": "group_read_as_members", + "binding_ref": "where:", + "text": "This shows the 44 Least Developed Countries, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_f04936b8378cde70bc6289ac1e45ee9b", + "definition": { + "schema_version": 1, + "spec_id": "spec_f04936b8378cde70bc6289ac1e45ee9b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AFG", + "label": "Afghanistan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BGD", + "label": "Bangladesh" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/HTI", + "label": "Haiti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KHM", + "label": "Cambodia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KIR", + "label": "Kiribati" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LAO", + "label": "Laos" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MMR", + "label": "Myanmar [Burma]" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NPL", + "label": "Nepal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SDN", + "label": "Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLB", + "label": "Solomon Islands" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TLS", + "label": "Timor-Leste" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TUV", + "label": "Tuvalu" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/YEM", + "label": "Yemen" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2020, + "end_year": 2023 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2020", + "end": "2023" + } + }, + "entities": [ + { + "ref": "country/AFG", + "label": "Afghanistan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BGD", + "label": "Bangladesh", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/HTI", + "label": "Haiti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KHM", + "label": "Cambodia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KIR", + "label": "Kiribati", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LAO", + "label": "Laos", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MMR", + "label": "Myanmar [Burma]", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NPL", + "label": "Nepal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SDN", + "label": "Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLB", + "label": "Solomon Islands", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TLS", + "label": "Timor-Leste", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TUV", + "label": "Tuvalu", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/YEM", + "label": "Yemen", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "destination": { + "label": "Least Developed Countries", + "group_id": "groups/UN.LDC" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 170, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 4 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2020, + "end_year": 2023 + } + }, + "headline": { + "year": 2023, + "year_named": true, + "named_window": { + "start_year": 2020, + "end_year": 2023 + }, + "observations": 43, + "series": 43, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 43 + }, + "recent_years": [ + { + "year": 2023, + "observations": 43, + "series": 43, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 43 + } + }, + { + "year": 2022, + "observations": 43, + "series": 43, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 43 + } + }, + { + "year": 2021, + "observations": 42, + "series": 42, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 42 + } + } + ] + }, + "download": { + "rows": 170, + "rows_exact": true, + "series": 43, + "window": { + "start_year": 2020, + "end_year": 2023 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 19, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 170, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 170, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 74, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 101, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross disbursements to the 44 Least Developed Countries for official development assistance, 2020 to 2023. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 44 Least Developed Countries", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2020 to 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AFG", + "label": "Afghanistan" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BGD", + "label": "Bangladesh" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/HTI", + "label": "Haiti" + }, + { + "ref": "country/KHM", + "label": "Cambodia" + }, + { + "ref": "country/KIR", + "label": "Kiribati" + }, + { + "ref": "country/LAO", + "label": "Laos" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MMR", + "label": "Myanmar [Burma]" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NPL", + "label": "Nepal" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SDN", + "label": "Sudan" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLB", + "label": "Solomon Islands" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TLS", + "label": "Timor-Leste" + }, + { + "ref": "country/TUV", + "label": "Tuvalu" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/YEM", + "label": "Yemen" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AFG", + "label": "Afghanistan" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BGD", + "label": "Bangladesh" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/HTI", + "label": "Haiti" + }, + { + "ref": "country/KHM", + "label": "Cambodia" + }, + { + "ref": "country/KIR", + "label": "Kiribati" + }, + { + "ref": "country/LAO", + "label": "Laos" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MMR", + "label": "Myanmar [Burma]" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NPL", + "label": "Nepal" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SDN", + "label": "Sudan" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLB", + "label": "Solomon Islands" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TLS", + "label": "Timor-Leste" + }, + { + "ref": "country/TUV", + "label": "Tuvalu" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/YEM", + "label": "Yemen" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2020, + "end_year": 2023 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_53102a787c202df65dcbb4d112c7bf33", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 170, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 2020, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2019, + "current_years": null + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2020, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2020, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross disbursements to the 44 Least Developed Countries for official development assistance, 2020 to 2023. Current US dollars · OECD DAC2a. The data holds no values for 1 of the 44 Least Developed Countries. This shows the 44 Least Developed Countries, each on its own.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 44 Least Developed Countries", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2020 to 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "The data holds no values for 1 of the 44 Least Developed Countries.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "This shows the 44 Least Developed Countries, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_f04936b8378cde70bc6289ac1e45ee9b/cv_daec84e443d4e1b37291242d90fc8fa8/files/sha256:5674a67518081e6d1d436a9ba9ebd4cfe59bb8aec561571b3264522dda1d72b0" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A5674a67518081e6d1d436a9ba9ebd4cfe59bb8aec561571b3264522dda1d72b0?X-Goog-Signature=redacted", + "x-dfo-trace-id": "9d519370377a48769040ee79a5811478" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A5674a67518081e6d1d436a9ba9ebd4cfe59bb8aec561571b3264522dda1d72b0?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "8c33a7114b194f509a8de63b79b0d683" + }, + "body_file": "fetch-spec-group-narrowed.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 170, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_f04936b8378cde70bc6289ac1e45ee9b", + "content_version": "cv_daec84e443d4e1b37291242d90fc8fa8", + "sentence": "Germany's gross disbursements to the 44 Least Developed Countries for official development assistance, 2020 to 2023. Current US dollars · OECD DAC2a." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.parquet new file mode 100644 index 0000000..7b8da91 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-narrowed.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.json new file mode 100644 index 0000000..5e278f1 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.json @@ -0,0 +1,5321 @@ +{ + "format_version": 1, + "name": "fetch-spec-group-origin-rebound", + "description": "Fetching a spec of Germany's flows to the least developed countries group with entities naming only origin rebinds origin to France. The identity entry that asks Search for the built sentence carries the destination's group, whose binding the build kept, and the sentence names the group.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:48Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "definition": { + "schema_version": 1, + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross disbursements to the 44 Least Developed Countries for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "entity_groups": { + "destination": { + "label": "Least Developed Countries", + "group_id": "groups/UN.LDC" + } + } + }, + "entities": { + "origin": [ + "country/FRA" + ] + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "definition": { + "schema_version": 1, + "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "scope": { + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/FRA" + ] + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4f36947ae53548928cf48b3ef6375841" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", + "identity": { + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/FRA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + }, + "content_version": "cv_66a0a4a0331d59b519aa1629dade3d99", + "prepared_at": "2026-10-21T13:05:48Z", + "coverage": { + "rows": 2114, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 44, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 63 + } + ], + "window": { + "kind": "all", + "start_year": 1960, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1960, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2114 + } + ], + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_count": 1, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDDAC2A", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:48.882315+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:1ea84fd402e660f640baf08b43a6ef4ed031c01b7dc8a781237c1c3006a3f934", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 21027, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:48.852766+00:00", + "tier": "working", + "url": "/api/datasets/spec_c2f21170dfa9f31705e47ed60c8fa305/cv_66a0a4a0331d59b519aa1629dade3d99/files/sha256:1ea84fd402e660f640baf08b43a6ef4ed031c01b7dc8a781237c1c3006a3f934" + }, + { + "artifact_digest": "sha256:b1f80f2d3df16b6cda3831730ee4749b13e1eb3fff82cdf2f479e71f087bfe2b", + "rendering": { + "statistics": "series" + }, + "bytes": 8093, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:48.852766+00:00", + "tier": "working", + "url": "/api/datasets/spec_c2f21170dfa9f31705e47ed60c8fa305/cv_66a0a4a0331d59b519aa1629dade3d99/files/sha256:b1f80f2d3df16b6cda3831730ee4749b13e1eb3fff82cdf2f479e71f087bfe2b" + } + ], + "series_count": 44, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 44 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 63 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 44, + "covered": 43 + }, + "missing": [ + { + "ref": "country/SSD", + "label": "South Sudan" + } + ], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 44, + "covered": 44 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingRecipient", + "columns": "time_period", + "state": "available", + "width": 64, + "cells": 2816 + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "available", + "width": 45, + "cells": 2835 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:48.852599Z" + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "variable_text": "dataset", + "identity": { + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/FRA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + }, + "entity_groups": { + "destination": { + "label": "Least Developed Countries", + "group_id": "groups/UN.LDC" + } + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4f01e12f49de482f8674fe65b685601f" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4f01e12f49de482f8674fe65b685601f", + "warnings": [], + "timing_ms": { + "total": 957, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "dataset", + "warnings": [], + "timing_ms": { + "total": 937, + "by_step": { + "validate": 1, + "walk": 5, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 918, + "bind": 0, + "where_places": 0, + "materialise": 7, + "answer": 5, + "options": 1 + } + }, + "operations": [], + "departures": [ + { + "code": "group_read_as_members", + "binding_ref": "where:", + "text": "This shows the 44 Least Developed Countries, each on its own." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", + "definition": { + "schema_version": 1, + "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/FRA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/AFG", + "label": "Afghanistan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/AGO", + "label": "Angola" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BDI", + "label": "Burundi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BEN", + "label": "Benin" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/BGD", + "label": "Bangladesh" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/CAF", + "label": "Central African Republic" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/COM", + "label": "Comoros" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/DJI", + "label": "Djibouti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ERI", + "label": "Eritrea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GIN", + "label": "Guinea" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GMB", + "label": "The Gambia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/HTI", + "label": "Haiti" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KHM", + "label": "Cambodia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KIR", + "label": "Kiribati" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LAO", + "label": "Laos" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LBR", + "label": "Liberia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/LSO", + "label": "Lesotho" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MDG", + "label": "Madagascar" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MLI", + "label": "Mali" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MMR", + "label": "Myanmar [Burma]" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MOZ", + "label": "Mozambique" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MRT", + "label": "Mauritania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/MWI", + "label": "Malawi" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NER", + "label": "Niger" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/NPL", + "label": "Nepal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/RWA", + "label": "Rwanda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SDN", + "label": "Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SEN", + "label": "Senegal" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLB", + "label": "Solomon Islands" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SOM", + "label": "Somalia" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/SSD", + "label": "South Sudan" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TCD", + "label": "Chad" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TGO", + "label": "Togo" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TLS", + "label": "Timor-Leste" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TUV", + "label": "Tuvalu" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/TZA", + "label": "Tanzania" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/UGA", + "label": "Uganda" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/YEM", + "label": "Yemen" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/ZMB", + "label": "Zambia" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "1960", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/AFG", + "label": "Afghanistan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BGD", + "label": "Bangladesh", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/HTI", + "label": "Haiti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KHM", + "label": "Cambodia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KIR", + "label": "Kiribati", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LAO", + "label": "Laos", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MMR", + "label": "Myanmar [Burma]", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NPL", + "label": "Nepal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SDN", + "label": "Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLB", + "label": "Solomon Islands", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TLS", + "label": "Timor-Leste", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TUV", + "label": "Tuvalu", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/YEM", + "label": "Yemen", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/FRA", + "label": "France", + "entity_type": "Country", + "role": "origin" + } + ], + "entity_groups": { + "destination": { + "label": "Least Developed Countries", + "group_id": "groups/UN.LDC" + } + }, + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 2114, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 61 + }, + { + "label": "variables", + "count": 1 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 41, + "series": 41, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 41 + }, + "recent_years": [ + { + "year": 2024, + "observations": 41, + "series": 41, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 41 + } + }, + { + "year": 2023, + "observations": 42, + "series": 42, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 42 + } + }, + { + "year": 2022, + "observations": 42, + "series": 42, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 42 + } + } + ] + }, + "download": { + "rows": 2114, + "rows_exact": true, + "series": 44, + "window": { + "start_year": 1960, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 1091, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 2095, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 2021, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 845, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 545, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "France's gross disbursements to the 44 Least Developed Countries for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "France", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/FRA" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "the 44 Least Developed Countries", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/AFG", + "label": "Afghanistan" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BGD", + "label": "Bangladesh" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/HTI", + "label": "Haiti" + }, + { + "ref": "country/KHM", + "label": "Cambodia" + }, + { + "ref": "country/KIR", + "label": "Kiribati" + }, + { + "ref": "country/LAO", + "label": "Laos" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MMR", + "label": "Myanmar [Burma]" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NPL", + "label": "Nepal" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SDN", + "label": "Sudan" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLB", + "label": "Solomon Islands" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TLS", + "label": "Timor-Leste" + }, + { + "ref": "country/TUV", + "label": "Tuvalu" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/YEM", + "label": "Yemen" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + }, + { + "ref": "country/FRA", + "label": "France" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/AFG", + "label": "Afghanistan" + }, + { + "ref": "country/AGO", + "label": "Angola" + }, + { + "ref": "country/BDI", + "label": "Burundi" + }, + { + "ref": "country/BEN", + "label": "Benin" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso" + }, + { + "ref": "country/BGD", + "label": "Bangladesh" + }, + { + "ref": "country/CAF", + "label": "Central African Republic" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo" + }, + { + "ref": "country/COM", + "label": "Comoros" + }, + { + "ref": "country/DJI", + "label": "Djibouti" + }, + { + "ref": "country/ERI", + "label": "Eritrea" + }, + { + "ref": "country/ETH", + "label": "Ethiopia" + }, + { + "ref": "country/GIN", + "label": "Guinea" + }, + { + "ref": "country/GMB", + "label": "The Gambia" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau" + }, + { + "ref": "country/HTI", + "label": "Haiti" + }, + { + "ref": "country/KHM", + "label": "Cambodia" + }, + { + "ref": "country/KIR", + "label": "Kiribati" + }, + { + "ref": "country/LAO", + "label": "Laos" + }, + { + "ref": "country/LBR", + "label": "Liberia" + }, + { + "ref": "country/LSO", + "label": "Lesotho" + }, + { + "ref": "country/MDG", + "label": "Madagascar" + }, + { + "ref": "country/MLI", + "label": "Mali" + }, + { + "ref": "country/MMR", + "label": "Myanmar [Burma]" + }, + { + "ref": "country/MOZ", + "label": "Mozambique" + }, + { + "ref": "country/MRT", + "label": "Mauritania" + }, + { + "ref": "country/MWI", + "label": "Malawi" + }, + { + "ref": "country/NER", + "label": "Niger" + }, + { + "ref": "country/NPL", + "label": "Nepal" + }, + { + "ref": "country/RWA", + "label": "Rwanda" + }, + { + "ref": "country/SDN", + "label": "Sudan" + }, + { + "ref": "country/SEN", + "label": "Senegal" + }, + { + "ref": "country/SLB", + "label": "Solomon Islands" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone" + }, + { + "ref": "country/SOM", + "label": "Somalia" + }, + { + "ref": "country/SSD", + "label": "South Sudan" + }, + { + "ref": "country/TCD", + "label": "Chad" + }, + { + "ref": "country/TGO", + "label": "Togo" + }, + { + "ref": "country/TLS", + "label": "Timor-Leste" + }, + { + "ref": "country/TUV", + "label": "Tuvalu" + }, + { + "ref": "country/TZA", + "label": "Tanzania" + }, + { + "ref": "country/UGA", + "label": "Uganda" + }, + { + "ref": "country/YEM", + "label": "Yemen" + }, + { + "ref": "country/ZMB", + "label": "Zambia" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_d0fa2dd4c5ba67436b13a12bb98547d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "origin": [ + "country/FRA" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 2128, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1985, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1992, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1973, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1994, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1986, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1989, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1987, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1961, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 1985, + "end_year": 1990 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1980, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1990, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1991, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1960, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1992, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1980, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1960, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "France's gross disbursements to the 44 Least Developed Countries for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a. This shows the 44 Least Developed Countries, each on its own.", + "sentence_plan": [ + { + "kind": "slot", + "text": "France", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/FRA" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "the 44 Least Developed Countries", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/AFG", + "country/AGO", + "country/BDI", + "country/BEN", + "country/BFA", + "country/BGD", + "country/CAF", + "country/COD", + "country/COM", + "country/DJI", + "country/ERI", + "country/ETH", + "country/GIN", + "country/GMB", + "country/GNB", + "country/HTI", + "country/KHM", + "country/KIR", + "country/LAO", + "country/LBR", + "country/LSO", + "country/MDG", + "country/MLI", + "country/MMR", + "country/MOZ", + "country/MRT", + "country/MWI", + "country/NER", + "country/NPL", + "country/RWA", + "country/SDN", + "country/SEN", + "country/SLB", + "country/SLE", + "country/SOM", + "country/SSD", + "country/TCD", + "country/TGO", + "country/TLS", + "country/TUV", + "country/TZA", + "country/UGA", + "country/YEM", + "country/ZMB" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1960 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "This shows the 44 Least Developed Countries, each on its own.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_c2f21170dfa9f31705e47ed60c8fa305/cv_66a0a4a0331d59b519aa1629dade3d99/files/sha256:1ea84fd402e660f640baf08b43a6ef4ed031c01b7dc8a781237c1c3006a3f934" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A1ea84fd402e660f640baf08b43a6ef4ed031c01b7dc8a781237c1c3006a3f934?X-Goog-Signature=redacted", + "x-dfo-trace-id": "f00d62be1abb42d9ae15319676c66876" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A1ea84fd402e660f640baf08b43a6ef4ed031c01b7dc8a781237c1c3006a3f934?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "2c16e3201afc4262a3a2219cafc506b4" + }, + "body_file": "fetch-spec-group-origin-rebound.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 2114, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", + "content_version": "cv_66a0a4a0331d59b519aa1629dade3d99", + "sentence": "France's gross disbursements to the 44 Least Developed Countries for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.parquet new file mode 100644 index 0000000..7ef63db Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-group-origin-rebound.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.json new file mode 100644 index 0000000..3e103c9 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.json @@ -0,0 +1,931 @@ +{ + "format_version": 1, + "name": "fetch-spec-known-sentence", + "description": "Fetching a spec whose sentence the client holds builds bare Parquet, follows the files route's redirect with a bare request, and returns one member with that sentence and no Search call.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:49Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.parquet new file mode 100644 index 0000000..e9df5e7 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-known-sentence.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-identity.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-identity.json new file mode 100644 index 0000000..8d5f10f --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-identity.json @@ -0,0 +1,802 @@ +{ + "format_version": 1, + "name": "fetch-spec-manifest-without-identity", + "description": "A manifest whose definition has no identity, a strict member, raises ContractError contract_violation on the build response, before any download.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The build's manifest definition loses identity, and the exchanges after it go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6" + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "72492035a830492dba11a29fa89ded8c" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-schema-version.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-schema-version.json new file mode 100644 index 0000000..daeb3ba --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-manifest-without-schema-version.json @@ -0,0 +1,866 @@ +{ + "format_version": 1, + "name": "fetch-spec-manifest-without-schema-version", + "description": "A manifest whose definition has no schema_version, a strict member, raises ContractError contract_violation on the build response, before any download, so a ref never holds a definition without one.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The build's manifest definition loses schema_version, and the exchanges after it go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "72492035a830492dba11a29fa89ded8c" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-member-not-resolvable.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-member-not-resolvable.json new file mode 100644 index 0000000..ff7635a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-member-not-resolvable.json @@ -0,0 +1,201 @@ +{ + "format_version": 1, + "name": "fetch-spec-member-not-resolvable", + "description": "A build refused because the spec no longer resolves raises InvalidRequestError with the server's code, and makes no further request.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "A 422 member_not_resolvable answers the build." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 422, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/member_not_resolvable", + "title": "Unprocessable Entity", + "status": 422, + "detail": "The spec's variable no longer resolves in the graph.", + "code": "member_not_resolvable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + } + ], + "expect": [ + { + "error": { + "class": "InvalidRequestError", + "code": "member_not_resolvable", + "trace_id": "00000000000000000000000000000000" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.json new file mode 100644 index 0000000..f1f0924 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.json @@ -0,0 +1,4656 @@ +{ + "format_version": 1, + "name": "fetch-spec-narrowed", + "description": "Fetching a spec with window=(2020, 2023) posts the window as input.scope, and the build answers a new spec_id. The client stores the built spec_id and content_version, takes the sentence from Search by posting the built definition's identity as a dataset_resubmit identity entry (variable_text \"dataset\" for a spec no answer part names), checks the answer's spec_id equals the built one, then downloads the file.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:30Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "window": [ + 2020, + 2023 + ] + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "scope": { + "window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "a72e52f677934a84bf84cdaee5c6c696" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "identity_version": "spec1", + "requested_window": { + "end_year": 2023, + "kind": "range", + "start_year": 2020 + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023, + "origin": "query" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023, + "origin": "query" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "variable_text": "dataset", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "identity_version": "spec1", + "requested_window": { + "end_year": 2023, + "kind": "range", + "start_year": 2020 + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e7b9afd7f94f41eb85716597d0432612" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "e7b9afd7f94f41eb85716597d0432612", + "warnings": [], + "timing_ms": { + "total": 145, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "dataset", + "warnings": [], + "timing_ms": { + "total": 110, + "by_step": { + "validate": 3, + "walk": 81, + "reread_arcs": 2, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 3, + "bind": 0, + "where_places": 0, + "materialise": 5, + "answer": 15, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2020, + "end_year": 2023 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "2020", + "end": "2023" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 4, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 4 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2020, + "end_year": 2023 + } + }, + "headline": { + "year": 2023, + "year_named": true, + "named_window": { + "start_year": 2020, + "end_year": 2023 + }, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2021, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 4, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2020, + "end_year": 2023 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 4, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 17, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 4, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 4, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2020 to 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2020, + "end_year": 2023 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_6b031290811d53255f1435e5983a3cc4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 4, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_53a50741df9d8818e3cc4fbd3d081a5f", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 4, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 14, + "undeclared_count": 2, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 5 + }, + { + "value": { + "ref": "CRSCooperationModalityA02", + "label": "sector budget support" + }, + "count": 2 + }, + { + "value": { + "ref": "CRSCooperationModalityB04", + "label": "basket fund and pooled funding" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB031", + "label": "contribution to multi-donor and multi-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB032", + "label": "contribution to multi-donor and single-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB033", + "label": "contribution to single-donor funding mechanism or earmarked contribution to a specific funding window or geographical location" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityA01", + "label": "general budget support" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityG01", + "label": "other administrative cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + }, + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 5, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 14 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 4 + }, + { + "value": { + "ref": "CRSTypeOfFinance510", + "label": "common equity" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance210", + "label": "interest subsidy" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance520", + "label": "share in collective investment vehicle" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 2020, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2019, + "current_years": null + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2020, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2020, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2020 to 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "bcb796babc2947ada1b42afa03a19f2a" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "a340dab2e965428fa1b99507c6d6dbd4" + }, + "body_file": "fetch-spec-narrowed.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.parquet new file mode 100644 index 0000000..e9df5e7 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-narrowed.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-operation-failed-resubmitted.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-operation-failed-resubmitted.json new file mode 100644 index 0000000..bb6f561 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-operation-failed-resubmitted.json @@ -0,0 +1,1342 @@ +{ + "format_version": 1, + "name": "fetch-spec-operation-failed-resubmitted", + "description": "A poll that answers a failed operation whose error is retryable posts the same build once more and polls the operation it starts; long_builds counts one resubmission.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with the first poll answering failed with a retryable operation_failed, and the build posted again." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "failed", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + }, + "error": { + "type": "/codes/operation_failed", + "title": "Internal Server Error", + "status": 500, + "detail": "The build's worker stopped before it finished.", + "code": "operation_failed", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "1df7b03572044eedaa412f6d2ad6b91f" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "b5b2e2d98a4047be98aea852117381c7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "686111d592f3451e8c55691d91a66663" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1517, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "9acc0caab7e143d38b3ecbfbcd225707" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1900, + "progress": { + "rows_written": 16734, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "22c08bbaa1384833bd92f8dd9cc6312d" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2377, + "progress": { + "rows_written": 64341, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "227de800033b4185ae9b958d3fa2cec7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2973, + "progress": { + "rows_written": 106324, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "4", + "x-dfo-trace-id": "3197d4d8b5094857afb9bbd14c49fcb0" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 3719, + "progress": { + "rows_written": 108798, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "29f271852cc04f1a8b287274f53105b6" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2018 + } + } + }, + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "prepared_at": "2026-10-21T13:06:08Z", + "coverage": { + "rows": 108798, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 238, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 7 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 108798 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:09.616741+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 913395, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + { + "artifact_digest": "sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93", + "rendering": { + "statistics": "series" + }, + "bytes": 967921, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93" + } + ], + "series_count": 21017, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 238 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 7 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 143 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 141 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:09.573841Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted", + "x-dfo-trace-id": "155fa981459c464482aea52657f99e8b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "228feaabf1f3473cad055088084dc378" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 108798, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5, + 1.5, + 1.5, + 1.5, + 1.5, + 1.517, + 1.9, + 2.377, + 2.973, + 3.719 + ], + "resubmissions": 1 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-not-found.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-not-found.json new file mode 100644 index 0000000..ad8f98a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-not-found.json @@ -0,0 +1,205 @@ +{ + "format_version": 1, + "name": "fetch-spec-poll-not-found", + "description": "A refused poll that is not retryable raises its error at once, with the one poll made in long_builds.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with a 404 operation_not_found answering the first poll, and the exchanges after it go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 404, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/operation_not_found", + "title": "Not Found", + "status": 404, + "detail": "No operation has this id.", + "code": "operation_not_found", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": false + } + } + } + ], + "expect": [ + { + "error": { + "class": "NotFoundError", + "code": "operation_not_found", + "trace_id": "00000000000000000000000000000000", + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited-not-retryable.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited-not-retryable.json new file mode 100644 index 0000000..e1d7cee --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited-not-retryable.json @@ -0,0 +1,202 @@ +{ + "format_version": 1, + "name": "fetch-spec-poll-rate-limited-not-retryable", + "description": "A refusal's retryable outranks its status on a poll too: a 429 that says it is not retryable raises RateLimitError at once, where a retryable 429 is polled again without spending a retry.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with a 429 problem document with no code and retryable false answering the first poll, and the exchanges after it go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 429, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "title": "Too Many Requests", + "status": 429, + "detail": "This key has used its requests for the day.", + "trace_id": "00000000000000000000000000000000", + "retryable": false + } + } + } + ], + "expect": [ + { + "error": { + "class": "RateLimitError", + "code": "refusal_without_code", + "trace_id": "00000000000000000000000000000000", + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited.json new file mode 100644 index 0000000..91b20d9 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-rate-limited.json @@ -0,0 +1,1233 @@ +{ + "format_version": 1, + "name": "fetch-spec-poll-rate-limited", + "description": "A 429 on a poll spends no retry: the client waits the Retry-After seconds, polls again and keeps the server's pacing after it.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with a bodiless 429 and Retry-After 3 answering the first poll." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 429, + "headers": { + "retry-after": "3" + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "1df7b03572044eedaa412f6d2ad6b91f" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "b5b2e2d98a4047be98aea852117381c7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "686111d592f3451e8c55691d91a66663" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1517, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "9acc0caab7e143d38b3ecbfbcd225707" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1900, + "progress": { + "rows_written": 16734, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "22c08bbaa1384833bd92f8dd9cc6312d" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2377, + "progress": { + "rows_written": 64341, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "227de800033b4185ae9b958d3fa2cec7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2973, + "progress": { + "rows_written": 106324, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "4", + "x-dfo-trace-id": "3197d4d8b5094857afb9bbd14c49fcb0" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 3719, + "progress": { + "rows_written": 108798, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "29f271852cc04f1a8b287274f53105b6" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2018 + } + } + }, + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "prepared_at": "2026-10-21T13:06:08Z", + "coverage": { + "rows": 108798, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 238, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 7 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 108798 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:09.616741+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 913395, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + { + "artifact_digest": "sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93", + "rendering": { + "statistics": "series" + }, + "bytes": 967921, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93" + } + ], + "series_count": 21017, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 238 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 7 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 143 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 141 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:09.573841Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted", + "x-dfo-trace-id": "155fa981459c464482aea52657f99e8b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "228feaabf1f3473cad055088084dc378" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 108798, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5, + 3.0, + 1.5, + 1.5, + 1.5, + 1.517, + 1.9, + 2.377, + 2.973, + 3.719 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-backoff.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-backoff.json new file mode 100644 index 0000000..3ff38ef --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-backoff.json @@ -0,0 +1,1225 @@ +{ + "format_version": 1, + "name": "fetch-spec-poll-refused-backoff", + "description": "With no pacing from the server, each poll waits the next step of the 1, 2, 4, 8 second backoff, and a refused poll uses a step too: the poll after the 503 waits 4 seconds.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with no Retry-After and no retry_after_ms on any response, and a 503 service_unavailable with no Retry-After answering the second poll." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1df7b03572044eedaa412f6d2ad6b91f" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "b5b2e2d98a4047be98aea852117381c7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "686111d592f3451e8c55691d91a66663" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "9acc0caab7e143d38b3ecbfbcd225707" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 16734, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "22c08bbaa1384833bd92f8dd9cc6312d" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 64341, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "227de800033b4185ae9b958d3fa2cec7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 106324, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "3197d4d8b5094857afb9bbd14c49fcb0" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "progress": { + "rows_written": 108798, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "29f271852cc04f1a8b287274f53105b6" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2018 + } + } + }, + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "prepared_at": "2026-10-21T13:06:08Z", + "coverage": { + "rows": 108798, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 238, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 7 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 108798 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:09.616741+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 913395, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + { + "artifact_digest": "sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93", + "rendering": { + "statistics": "series" + }, + "bytes": 967921, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93" + } + ], + "series_count": 21017, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 238 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 7 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 143 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 141 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:09.573841Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted", + "x-dfo-trace-id": "155fa981459c464482aea52657f99e8b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "228feaabf1f3473cad055088084dc378" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 108798, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.0, + 2.0, + 4.0, + 8.0, + 8.0, + 8.0, + 8.0, + 8.0, + 8.0, + 8.0 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-retry-after.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-retry-after.json new file mode 100644 index 0000000..4fe3f7e --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused-retry-after.json @@ -0,0 +1,1244 @@ +{ + "format_version": 1, + "name": "fetch-spec-poll-refused-retry-after", + "description": "The poll after a refused poll waits the refusal's Retry-After whatever its status, as a 429's, and the polls after it keep the server's pacing.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with a 503 service_unavailable and Retry-After 5 answering the first poll." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json", + "retry-after": "5" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "1df7b03572044eedaa412f6d2ad6b91f" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "b5b2e2d98a4047be98aea852117381c7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "686111d592f3451e8c55691d91a66663" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1517, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "9acc0caab7e143d38b3ecbfbcd225707" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1900, + "progress": { + "rows_written": 16734, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "22c08bbaa1384833bd92f8dd9cc6312d" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2377, + "progress": { + "rows_written": 64341, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "227de800033b4185ae9b958d3fa2cec7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2973, + "progress": { + "rows_written": 106324, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "4", + "x-dfo-trace-id": "3197d4d8b5094857afb9bbd14c49fcb0" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 3719, + "progress": { + "rows_written": 108798, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "29f271852cc04f1a8b287274f53105b6" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2018 + } + } + }, + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "prepared_at": "2026-10-21T13:06:08Z", + "coverage": { + "rows": 108798, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 238, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 7 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 108798 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:09.616741+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 913395, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + { + "artifact_digest": "sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93", + "rendering": { + "statistics": "series" + }, + "bytes": 967921, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93" + } + ], + "series_count": 21017, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 238 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 7 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 143 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 141 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:09.573841Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted", + "x-dfo-trace-id": "155fa981459c464482aea52657f99e8b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "228feaabf1f3473cad055088084dc378" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 108798, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5, + 5.0, + 1.5, + 1.5, + 1.5, + 1.517, + 1.9, + 2.377, + 2.973, + 3.719 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused.json new file mode 100644 index 0000000..4530dea --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-refused.json @@ -0,0 +1,1289 @@ +{ + "format_version": 1, + "name": "fetch-spec-poll-refused", + "description": "A retryable refused poll other than a 429 spends one of the two retries, and a poll that answers restores them, so two 503s in a row after an answered poll are polled again too. A refused poll changes no pacing: the poll after it waits what the refused one waited.", + "origin": { + "kind": "synthetic", + "derived_from": "mint-async-build", + "edit": "As fetch-spec-async-build, with a 503 service_unavailable answering the first poll, and two answering the third." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "1df7b03572044eedaa412f6d2ad6b91f" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "b5b2e2d98a4047be98aea852117381c7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "686111d592f3451e8c55691d91a66663" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1517, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "9acc0caab7e143d38b3ecbfbcd225707" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1900, + "progress": { + "rows_written": 16734, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "22c08bbaa1384833bd92f8dd9cc6312d" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2377, + "progress": { + "rows_written": 64341, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "227de800033b4185ae9b958d3fa2cec7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2973, + "progress": { + "rows_written": 106324, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "4", + "x-dfo-trace-id": "3197d4d8b5094857afb9bbd14c49fcb0" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 3719, + "progress": { + "rows_written": 108798, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "29f271852cc04f1a8b287274f53105b6" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2018 + } + } + }, + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "prepared_at": "2026-10-21T13:06:08Z", + "coverage": { + "rows": 108798, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 238, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 7 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 108798 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:09.616741+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 913395, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + { + "artifact_digest": "sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93", + "rendering": { + "statistics": "series" + }, + "bytes": 967921, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93" + } + ], + "series_count": 21017, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 238 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 7 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 143 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 141 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:09.573841Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted", + "x-dfo-trace-id": "155fa981459c464482aea52657f99e8b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "228feaabf1f3473cad055088084dc378" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 108798, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5, + 1.5, + 1.5, + 1.5, + 1.5, + 1.5, + 1.5, + 1.517, + 1.9, + 2.377, + 2.973, + 3.719 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-relative-location.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-relative-location.json new file mode 100644 index 0000000..ca66cd6 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-relative-location.json @@ -0,0 +1,930 @@ +{ + "format_version": 1, + "name": "fetch-spec-relative-location", + "description": "A relative Location resolves against the files route's URL, not the base URL's origin, and the client fetches the file there, on the API's origin, reaching the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The files route's Location becomes the relative URL 'bytes', and the file comes from the path it resolves to." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "bytes", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/bytes" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-request-invalid.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-request-invalid.json new file mode 100644 index 0000000..010e041 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-request-invalid.json @@ -0,0 +1,210 @@ +{ + "format_version": 1, + "name": "fetch-spec-request-invalid", + "description": "Fetching a spec with a facet the server does not know sends it in input.scope.facets; the build refuses 400 request_invalid, which raises InvalidRequestError.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:50Z" + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "facets": { + "colour": "blue" + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "scope": { + "facets": { + "colour": { + "ref": "blue" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 400, + "headers": { + "content-type": "application/problem+json", + "x-dfo-trace-id": "b847ea8e841a4560a8ffa3b7f337f361" + }, + "json": { + "type": "/codes/request_invalid", + "title": "Bad Request", + "status": 400, + "detail": "Value error, unknown facet axis/axes: colour", + "code": "request_invalid", + "pointer": "/input/scope", + "trace_id": "b847ea8e841a4560a8ffa3b7f337f361", + "capability_version": "dset_88fecfec3c5b89d1", + "retryable": false + } + } + } + ], + "expect": [ + { + "error": { + "class": "InvalidRequestError", + "code": "request_invalid", + "trace_id": "b847ea8e841a4560a8ffa3b7f337f361" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-resubmit-other-spec.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-resubmit-other-spec.json new file mode 100644 index 0000000..a604bd5 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-resubmit-other-spec.json @@ -0,0 +1,4592 @@ +{ + "format_version": 1, + "name": "fetch-spec-resubmit-other-spec", + "description": "When Search answers the built identity with a spec_id other than the built one, the client raises ContractError before the download.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-narrowed", + "edit": "Search answers the built identity with the posted spec_id, and the exchanges after it go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "window": [ + 2020, + 2023 + ] + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "scope": { + "window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "a72e52f677934a84bf84cdaee5c6c696" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "identity_version": "spec1", + "requested_window": { + "end_year": 2023, + "kind": "range", + "start_year": 2020 + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023, + "origin": "query" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023, + "origin": "query" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "variable_text": "dataset", + "identity": { + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "identity_version": "spec1", + "requested_window": { + "end_year": 2023, + "kind": "range", + "start_year": 2020 + }, + "shape": { + "kind": "statvar_schema", + "measured_property": "amount", + "measurement_qualifier": "Nominal", + "population_type": "FinancialFlow", + "stat_type": "measuredValue" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ] + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e7b9afd7f94f41eb85716597d0432612" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "e7b9afd7f94f41eb85716597d0432612", + "warnings": [], + "timing_ms": { + "total": 145, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "dataset", + "warnings": [], + "timing_ms": { + "total": 110, + "by_step": { + "validate": 3, + "walk": 81, + "reread_arcs": 2, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 3, + "bind": 0, + "where_places": 0, + "materialise": 5, + "answer": 15, + "options": 1 + } + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2020, + "end_year": 2023 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "2020", + "end": "2023" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 4, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 4 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2020, + "end_year": 2023 + } + }, + "headline": { + "year": 2023, + "year_named": true, + "named_window": { + "start_year": 2020, + "end_year": 2023 + }, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2021, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 4, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2020, + "end_year": 2023 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 4, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 17, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 4, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 4, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2020 to 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2020, + "end_year": 2023 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_6b031290811d53255f1435e5983a3cc4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 4, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_53a50741df9d8818e3cc4fbd3d081a5f", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2020, + "end_year": 2023 + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 4, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 14, + "undeclared_count": 2, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 5 + }, + { + "value": { + "ref": "CRSCooperationModalityA02", + "label": "sector budget support" + }, + "count": 2 + }, + { + "value": { + "ref": "CRSCooperationModalityB04", + "label": "basket fund and pooled funding" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB031", + "label": "contribution to multi-donor and multi-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB032", + "label": "contribution to multi-donor and single-entity funding mechanism" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB033", + "label": "contribution to single-donor funding mechanism or earmarked contribution to a specific funding window or geographical location" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityA01", + "label": "general budget support" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE02", + "label": "imputed student cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityG01", + "label": "other administrative cost" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityE01", + "label": "scholarship and training in donor country" + }, + "count": 1 + } + ] + }, + { + "property": "crsTypeOfFinance", + "varies": true, + "distinct_count": 5, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 14 + }, + { + "value": { + "ref": "CRSTypeOfFinance421", + "label": "standard loan" + }, + "count": 4 + }, + { + "value": { + "ref": "CRSTypeOfFinance510", + "label": "common equity" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance210", + "label": "interest subsidy" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSTypeOfFinance520", + "label": "share in collective investment vehicle" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 2020, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2019, + "current_years": null + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2020, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2020, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2020, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2020, + "end_year": 2023 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2020 to 2023", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "e7b9afd7f94f41eb85716597d0432612" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-same-origin-artifact-url.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-same-origin-artifact-url.json new file mode 100644 index 0000000..9750a39 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-same-origin-artifact-url.json @@ -0,0 +1,930 @@ +{ + "format_version": 1, + "name": "fetch-spec-same-origin-artifact-url", + "description": "An absolute artifact url on the API's origin names the same files route as its root-relative form, so the client asks it as that origin_path and reaches the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "Every artifact url of the build's manifest becomes absolute on the API's origin." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "http://127.0.0.1:19493/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "http://127.0.0.1:19493/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-signed-fetch-partial.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-signed-fetch-partial.json new file mode 100644 index 0000000..0b27199 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-signed-fetch-partial.json @@ -0,0 +1,957 @@ +{ + "format_version": 1, + "name": "fetch-spec-signed-fetch-partial", + "description": "A signed fetch that answers anything but 200 is a failed fetch: the client asks the files route once more and fetches again, and the second fetch's 200 gives the dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The first signed fetch answers 206 with the file's bytes, and the files route is asked again." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 206, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0911c16fb4824a499926e24a34069b40" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "6a9d471b19b94292a956e2a09a1e1fa7" + }, + "body_file": "fetch-spec-known-sentence.parquet" + } + } + ], + "expect": [ + { + "dataset": { + "rows": 4, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-storage-artifact-url.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-storage-artifact-url.json new file mode 100644 index 0000000..7f0329e --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-storage-artifact-url.json @@ -0,0 +1,867 @@ +{ + "format_version": 1, + "name": "fetch-spec-storage-artifact-url", + "description": "An artifact url names a files route, which is on the API's origin; one on the storage host raises ContractError contract_violation before any request for the file, as on any other origin.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "Every artifact url of the build's manifest becomes absolute on https://storage.googleapis.com, and the exchanges after the build go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "72492035a830492dba11a29fa89ded8c" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "https://storage.googleapis.com/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "https://storage.googleapis.com/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "72492035a830492dba11a29fa89ded8c" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-strict-warning.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-strict-warning.json new file mode 100644 index 0000000..d674e42 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-strict-warning.json @@ -0,0 +1,868 @@ +{ + "format_version": 1, + "name": "fetch-spec-strict-warning", + "description": "A strict fetch raises the manifest's first warning above info severity, coverage_below_scope at warn here, as DataWarning before the download, with the trace id of the build response it read.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The fetch is strict, the build's response carries x-dfo-trace-id 33333333333333333333333333333333, and the exchanges after the build go." + }, + "call": [ + { + "op": "fetch", + "spec": { + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 2020 to 2023. Current US dollars · OECD Creditor Reporting System (CRS)." + }, + "strict": true + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "33333333333333333333333333333333" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_cb5baa4161de718f18583060674dbca6", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2023, + "start_year": 2020 + } + } + }, + "content_version": "cv_bf242138f8d0a892c97da9373d1626f4", + "prepared_at": "2026-10-21T13:05:35Z", + "coverage": { + "rows": 4, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 4 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "axis": "provenance", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2023, + "start_year": 2020 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_count": 21, + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "head", + "confirmed_at": "2026-10-21T13:05:35.077517+00:00" + }, + "warnings": [ + { + "code": "coverage_below_scope", + "severity": "warn", + "message": "The served coverage falls short of the requested scope. No observations were served for dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal, dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal, which hold none at the observation period the other members serve in the requested years." + } + ], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9541, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:e9980972bce1cec82584a996b6e3f7f2e3b37ab1eb2e5226a40d37f7efe31c70" + }, + { + "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", + "rendering": { + "statistics": "series" + }, + "bytes": 5741, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:35.038218+00:00", + "tier": "working", + "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4" + } + ], + "series_count": 1, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 4 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:35.038284Z" + } + } + } + } + ], + "expect": [ + { + "error": { + "class": "DataWarning", + "code": "coverage_below_scope", + "trace_id": "33333333333333333333333333333333" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-strict-info-notice.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-strict-info-notice.json new file mode 100644 index 0000000..d552acf --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-strict-info-notice.json @@ -0,0 +1,4548 @@ +{ + "format_version": 1, + "name": "fetch-strict-info-notice", + "description": "An info-severity warning issues no SearchWarning, so a strict fetch of the answer builds the same dataset.", + "origin": { + "kind": "synthetic", + "derived_from": "answer-definite-fetch", + "edit": "Part 0 carries an info-severity warning, and the fetch is strict." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Nigeria for basic health care" + }, + { + "op": "fetch", + "strict": true + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Nigeria for basic health care" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "d09ca5f0ae574410bf93b5d905ea8009" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Nigeria for basic health care", + "normalized_query": "ODA disbursements from Germany to Nigeria for basic health care", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "d09ca5f0ae574410bf93b5d905ea8009", + "warnings": [], + "timing_ms": { + "total": 5038, + "by_step": { + "coverage": 0, + "extract": 1141 + } + }, + "llm_usage": { + "input_tokens": 6116, + "output_tokens": 408, + "cached_tokens": 0 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "basic health care ODA disbursements", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 3758, + "by_step": { + "recall": 694, + "shape_arcs": 1, + "shape_probe_coverage": 6, + "shape_probe": 489, + "shape_groups": 16, + "shape_labels": 0, + "shape_admission": 1, + "shape": 1365, + "bind": 1248, + "materialise": 11, + "answer": 423, + "options": 17 + } + }, + "restatement": { + "variable_text": "basic health care ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Nigeria", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal", + "label": "gross disbursements (basic health care, official development assistance, standard grant)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 21, + "member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": true + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/NGA", + "label": "Nigeria" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 5, + "member_count_exact": true, + "served_count": 21, + "data_date_range": { + "start": "1995", + "end": "2024" + } + }, + "entities": [ + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "origin" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 30, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 15 + }, + { + "label": "variables", + "count": 5 + } + ] + }, + "headline": { + "year": 2024, + "year_named": false, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2024, + "observations": 3, + "series": 3, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2023, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + }, + { + "year": 2022, + "observations": 1, + "series": 1, + "role_counts": { + "financingProvider": 1, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 30, + "rows_exact": true, + "series": 5, + "window": { + "start_year": 1995, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode122", + "label": "basic health" + }, + "value_kind": "enum_value" + }, + "relation": "parent", + "parent": "CRSPurposeCode120", + "member_count": 4, + "served_rows": 88, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance100", + "label": "grant" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12672, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 14098, + "served_rows": 30, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB", + "label": "core contribution and pooled programme and fund" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1606, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityB", + "member_count": 1331, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7005, + "served_rows": 7, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD", + "label": "expert and other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 1, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 1600, + "served_rows": 1, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/NGA", + "label": "Nigeria" + }, + { + "ref": "country/DEU", + "label": "Germany" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "crsPurpose", + "label": "CRS purpose" + }, + "label": "sector" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFinance", + "label": "CRS type of finance" + }, + "label": "instrument" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsTypeOfFlow", + "label": "CRS type of flow" + }, + "label": "flow" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "text_recognized" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/NGA", + "label": "Nigeria" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "basic health care", + "named": [ + { + "ref": "CRSPurposeCode12220", + "label": "basic health care" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_80b92ca1ba1114b426eb5e79b84361d4", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 30, + "served_rows_exact": true + }, + { + "definition": { + "schema_version": 1, + "spec_id": "spec_c394f9108db2100f1c8e4532d8d1c804", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialObligation", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialObligationType", + "binding": { + "state": "value", + "ref": "Commitment" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "label": "commitments", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialObligation", + "label": "financial obligation" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialObligationType", + "value": { + "ref": "Commitment", + "label": "commitment" + } + } + ], + "served_rows": 24, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "open_axis_facts": [ + { + "property": "crsTypeOfFinance", + "varies": false, + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "distinct_count": 1, + "undeclared_count": 0, + "values": [ + { + "value": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "count": 5 + } + ] + }, + { + "property": "crsCooperationModality", + "varies": true, + "distinct_count": 4, + "undeclared_count": 1, + "values": [ + { + "value": { + "ref": "CRSCooperationModalityB03", + "label": "contribution to specific-purpose programme and fund managed by an international organisation" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" + }, + "count": 1 + }, + { + "value": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "count": 1 + } + ] + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 1997, + "end_year": 2021 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2002, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2014, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 1996, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 1995, + "end_year": 2019 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2003, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2000, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2001, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 1998, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2013, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 1997, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2010, + "end_year": 2020 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2000, + "end_year": 2023 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2011, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "current_years": { + "start_year": 1995, + "end_year": 2010 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010 + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2006, + "end_year": 2016 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2014, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 1995, + "end_year": 2024 + }, + "constant_years": { + "start_year": 1995, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "NGN", + "origin": "EUR" + } + } + } + } + } + ], + "rendered_sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ + { + "kind": "slot", + "text": "Germany", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [ + "country/DEU" + ], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": "'s", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross ODA disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:crsTypeOfFinance", + "how:crsTypeOfFlow", + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Nigeria", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/NGA" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "basic health care", + "axis": "how", + "segment": "heading", + "property_dcid": "crsPurpose", + "binding_ref": "how:crsPurpose", + "entity_refs": [], + "states": [ + "how:crsPurpose" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsCooperationModality", + "binding_ref": "how:crsCooperationModality", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFinance", + "binding_ref": "how:crsTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "crsTypeOfFlow", + "binding_ref": "how:crsTypeOfFlow", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "1995 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD Creditor Reporting System (CRS)", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "90ec74fce6534d0d8e4142b0e1355782" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "state": "unbound" + }, + "property": "crsCooperationModality" + }, + { + "binding": { + "ref": "CRSPurposeCode12220", + "state": "value" + }, + "property": "crsPurpose" + }, + { + "binding": { + "state": "unbound" + }, + "property": "crsTypeOfFinance" + }, + { + "binding": { + "ref": "CRSTypeOfFlow10", + "state": "value" + }, + "property": "crsTypeOfFlow" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "origin": [ + "country/DEU" + ], + "destination": [ + "country/NGA" + ] + }, + "identity_version": "spec1", + "requested_window": { + "kind": "all" + } + } + }, + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "prepared_at": "2026-10-21T13:05:05Z", + "coverage": { + "rows": 30, + "dimensions": [ + { + "label": "financingProvider", + "count": 1, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 27 + } + ], + "window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + } + }, + "citation": { + "text": "OECD Creditor Reporting System (CRS) (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDCreditorReportingSystem", + "label": "OECD Creditor Reporting System (CRS)", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=crs&pg=0&snb=30&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_CRS%40DF_CRS&df[ag]=OECD.DCD.FSD&df[vs]=1.6&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "The Creditor Reporting System (CRS) is the OECD Development Assistance Committee's activity-level database of development finance. Each record is a project, programme or contribution reported by a bilateral provider, a multilateral organisation or a private foundation, with its recipient, sector and purpose, channel of delivery, aid type, and commitment and disbursement amounts. It covers ODA, other official flows, private sector instruments and private philanthropy, and is the source for any breakdown by sector, channel or project.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet", + "attribution": "OECD (2026), Creditor Reporting System (CRS), OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_CRS/CRS.parquet (accessed on 2026-10-15)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1973-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The complete CRS file is downloaded from the OECD each time the pipeline runs, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Exclude donor core contributions to multilaterals", + "description": "The OECD instructs that donor core contributions to multilateral organisations, reported as ordinary CRS rows flagged `bi_multi = 2`, are excluded to compute bilateral flows. These contributions are already reported in Members' Total Use of the Multilateral System, so keeping them would double count." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets." + }, + { + "transformation": "Select dimensions", + "description": "Every figure is reported against the year, the provider and the recipient, and four dimensions from the CRS: type of flow, co-operation modality, type of finance and purpose code. The CRS describes each activity in far more detail than this, including project titles, descriptions, channels and policy markers, none of which is carried through." + }, + { + "transformation": "Aggregate totals", + "description": "Activities sharing the same year, provider, recipient and dimensions are summed. Commitments, disbursements, net disbursements and grant equivalents are each aggregated as separate measures. Every figure is reported in US dollars at current prices." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "Commitments, gross and net disbursements, and grant equivalents by donor, recipient, flow type, finance type, modality and purpose, at current US dollar prices. Covers ODA, other official flows, private development finance and private sector instruments." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "all", + "start_year": 1995, + "end_year": 2024, + "origin": "default" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDCreditorReportingSystem", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 6 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 15 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance520_CRSCooperationModalityC01_CRSPurposeCode12220_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + } + ], + "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", + "family_member_count": 21, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDCreditorReportingSystem", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "3734627990144800868" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:05:06.336796+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 9785, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + { + "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", + "rendering": { + "statistics": "series" + }, + "bytes": 5981, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:05:06.298931+00:00", + "tier": "working", + "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff" + } + ], + "series_count": 5, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 5 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 27 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "stat_var", + "columns": "time_period", + "state": "available", + "width": 28, + "cells": 140 + }, + { + "index": "time_period", + "columns": "stat_var", + "state": "available", + "width": 6, + "cells": 162 + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:05:06.298810Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted", + "x-dfo-trace-id": "d14640239a5a4ffa8f113140eb5b23a0" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A598ce1c1e63d53ab7326cec266aa9a523d9cc2f1acfba280fd2cf2f01649fbde?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "58cc82a3079f4e4298eb45378fdf10db" + }, + "body_file": "answer-definite-fetch.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "complete": true, + "specs": [ + "spec_774d6c001a6250aa67ca676ab067895e" + ], + "gaps": [] + } + }, + { + "dataset": { + "rows": 30, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "crsCooperationModality", + "crsCooperationModality_label", + "crsPurpose", + "crsPurpose_label", + "crsTypeOfFinance", + "crsTypeOfFinance_label", + "crsTypeOfFlow", + "crsTypeOfFlow_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "basic health care ODA disbursements" + ], + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + ], + "missing": [], + "search_warning": false + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.json b/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.json new file mode 100644 index 0000000..cf3c278 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.json @@ -0,0 +1,1230 @@ +{ + "format_version": 1, + "name": "mint-async-build", + "description": "Minting a spec whose estimate is just above the 100,000-row sync budget answers 202 with an operation the client reports as pending. Waiting polls the operation path built from operation_id, sleeping retry_after_ms when the response carries it and backing off from 1 to 8 seconds otherwise, until done; the done manifest's file is then downloaded.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:05:50Z" + }, + "call": [ + { + "op": "mint", + "spec": { + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + }, + { + "op": "result" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2018, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 202, + "headers": { + "content-type": "application/json", + "location": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry-after": "2", + "x-dfo-trace-id": "bbf5965c737145669a9a88d04867b830" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500 + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "621bdcc038e34f44bec226434f3f7378" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "1df7b03572044eedaa412f6d2ad6b91f" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "b5b2e2d98a4047be98aea852117381c7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "686111d592f3451e8c55691d91a66663" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1517, + "progress": { + "rows_written": 0, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "9acc0caab7e143d38b3ecbfbcd225707" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 1900, + "progress": { + "rows_written": 16734, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "22c08bbaa1384833bd92f8dd9cc6312d" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2377, + "progress": { + "rows_written": 64341, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "227de800033b4185ae9b958d3fa2cec7" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 2973, + "progress": { + "rows_written": 106324, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "4", + "x-dfo-trace-id": "3197d4d8b5094857afb9bbd14c49fcb0" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "running", + "poll": "/api/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "retry_after_ms": 3719, + "progress": { + "rows_written": 108798, + "estimate_rows": 108798 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "29f271852cc04f1a8b287274f53105b6" + }, + "json": { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2018 + } + } + }, + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "prepared_at": "2026-10-21T13:06:08Z", + "coverage": { + "rows": 108798, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 238, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 7 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2018 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 108798 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:09.616741+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 913395, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + { + "artifact_digest": "sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93", + "rendering": { + "statistics": "series" + }, + "bytes": 967921, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:09.573990+00:00", + "tier": "working", + "url": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:172165ba17975b34fbcce2a7c4e322fac292151f004b58c817039ec41a45ca93" + } + ], + "series_count": 21017, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 238 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 7 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 143 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 238, + "covered": 141 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 238, + "covered": 238 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 7 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 238 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:09.573841Z" + } + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_6c6a169745fa827d302436a068eaf569/cv_d0316e8762f5b852a55e328777d17b6b/files/sha256:e8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted", + "x-dfo-trace-id": "155fa981459c464482aea52657f99e8b" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Ae8f06f7ca71d7d941c11389e66c94e1db1675c4839ec602d4569b049bf4d4dad?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "228feaabf1f3473cad055088084dc378" + }, + "body_file": "mint-async-build.parquet" + } + } + ], + "expect": [ + { + "operation": { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "status": "pending" + } + }, + { + "dataset": { + "rows": 108798, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_6c6a169745fa827d302436a068eaf569", + "content_version": "cv_d0316e8762f5b852a55e328777d17b6b", + "sentence": "Gross disbursements to 238 recipients from 172 providers for official development assistance, 2018 to 2024. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_991e4d2ceba89db9a36fa573e3935572a030d57902d5077eb85f566e98cb5173", + "poll_waits": [ + 1.5, + 1.5, + 1.5, + 1.5, + 1.517, + 1.9, + 2.377, + 2.973, + 3.719 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.parquet b/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.parquet new file mode 100644 index 0000000..05908d4 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/mint-async-build.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/newest-version-unreadable-page.json b/python/client-contract/src/dfo_client_contract/scenarios/newest-version-unreadable-page.json new file mode 100644 index 0000000..587d844 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/newest-version-unreadable-page.json @@ -0,0 +1,124 @@ +{ + "format_version": 1, + "name": "newest-version-unreadable-page", + "description": "A versions page with no versions list raises ContractError contract_violation, since only a NotFoundError reads as no stored version.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-ref-newest-version", + "edit": "The versions page names its versions list items." + }, + "call": [ + { + "op": "newest_version", + "spec": { + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "definition": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "crsCooperationModality", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsPurpose", + "binding": { + "state": "value", + "ref": "CRSPurposeCode12220" + } + }, + { + "property": "crsTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "crsTypeOfFlow", + "binding": { + "state": "value", + "ref": "CRSTypeOfFlow10" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/NGA" + ], + "origin": [ + "country/DEU" + ] + }, + "requested_window": { + "kind": "all" + } + } + }, + "sentence": "Germany's gross ODA disbursements to Nigeria for basic health care, 1995 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." + } + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/spec_774d6c001a6250aa67ca676ab067895e/versions?limit=1" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "e5ff992e18a94c18866838012ff15862" + }, + "json": { + "schema_version": 1, + "spec_id": "spec_774d6c001a6250aa67ca676ab067895e", + "next_cursor": null, + "complete": true, + "items": [ + { + "content_version": "cv_b92d94774702c7f05f2075d0b03dd756", + "base_content_version": null, + "rendering": "plain", + "groupby": null + } + ] + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "e5ff992e18a94c18866838012ff15862" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/operation-failed-without-error.json b/python/client-contract/src/dfo_client_contract/scenarios/operation-failed-without-error.json new file mode 100644 index 0000000..e4ed5f8 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/operation-failed-without-error.json @@ -0,0 +1,93 @@ +{ + "format_version": 1, + "name": "operation-failed-without-error", + "description": "A failed operation whose resource carries no error raises ServerError with the code operation_failed; a resumed operation holds no build request, so nothing is posted again.", + "origin": { + "kind": "synthetic", + "derived_from": "operation-resume", + "edit": "The resumed operation's first poll answers it failed with no error member." + }, + "call": [ + { + "op": "operation", + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + { + "op": "result" + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "05701162424340a4826f3babe8623497" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "pending", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "330e5223958b4f9bb2832079fa1a1bf7" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "failed", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1500 + } + } + } + } + ], + "expect": [ + { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "pending" + } + }, + { + "error": { + "class": "ServerError", + "code": "operation_failed", + "trace_id": "330e5223958b4f9bb2832079fa1a1bf7", + "long_builds": [ + { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "poll_waits": [ + 1.5 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.json b/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.json new file mode 100644 index 0000000..6c9afa4 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.json @@ -0,0 +1,5874 @@ +{ + "format_version": 1, + "name": "operation-resume", + "description": "Resuming a long build another process started reads its operation by id, and the operation is pending or running. Waiting polls it at the server's pacing until done; the client holds no spec, so it takes the sentence from Search by posting the built identity with variable_text \"dataset\", then downloads the file. A resumed build holds no request, so a failed operation is not posted again.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:13Z" + }, + "call": [ + { + "op": "operation", + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + { + "op": "result" + } + ], + "exchanges": [ + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "05701162424340a4826f3babe8623497" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "pending", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "330e5223958b4f9bb2832079fa1a1bf7" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "0e7e7a314c4e4eb3a93b781968cc2026" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "d0b0a6aa8f59442bbc225bb043881fbc" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1500, + "progress": { + "rows_written": 0, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "a6e1921e93944058a3083758a470bb80" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1518, + "progress": { + "rows_written": 1876, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "2", + "x-dfo-trace-id": "29c3f42fcb2442d49636e30e36584ced" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 1901, + "progress": { + "rows_written": 16634, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "5ae05887ed9e4f10b5771d5af03b45ab" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 2381, + "progress": { + "rows_written": 34372, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "3", + "x-dfo-trace-id": "0bdf8274baba4a90911a519ebcb0a316" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 2979, + "progress": { + "rows_written": 64989, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "4", + "x-dfo-trace-id": "e219ac63111f485a82f419a4257bb933" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 3729, + "progress": { + "rows_written": 88009, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "retry-after": "5", + "x-dfo-trace-id": "d81a3a69c6184e75a73cc40c1076576c" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "running", + "poll": "/api/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "retry_after_ms": 4696, + "progress": { + "rows_written": 123015, + "estimate_rows": 123015 + } + } + } + } + }, + { + "request": { + "method": "GET", + "path": "/datasets/operations/op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "babd0944d30042f89412ae971f1e748c" + }, + "json": { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "done" + }, + "manifest": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_8a4676c4abdf43d105aeff9d4ba9299b", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "open_roles": [ + "destination" + ], + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2017 + } + } + }, + "content_version": "cv_50e17ab9c2e732f13c48cf2028ac5928", + "prepared_at": "2026-10-21T13:06:37Z", + "coverage": { + "rows": 123015, + "dimensions": [ + { + "label": "financingProvider", + "count": 172, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 241, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 8 + } + ], + "window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2017 + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "facets": [ + { + "ref": "provenance/OECDDAC2A", + "axis": "provenance", + "basis": "bound", + "default_policy": null, + "selection_reason": null, + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": null + }, + { + "ref": null, + "axis": "measurementMethod", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + }, + { + "ref": "CurrencyUSD", + "axis": "unit", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253", + "default_policy_version": "1" + } + ], + "applied_window": { + "kind": "range", + "origin": "query", + "end_year": 2024, + "start_year": 2017 + }, + "graph_revision": null, + "normalisations": [], + "code_index_stamp": { + "exported_at": "2026-10-20T19:50:14Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "graph_endpoint": "graph_release" + }, + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "capability_version": "dset_88fecfec3c5b89d1", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 123015 + } + ], + "family_member_count": 1, + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "frame_grammar_version": "1.1.0", + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:06:38.298569+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:cf2a4a97cc0fdfeb74ce021502e58c70d87ae4d67dc061a46fa62bb4f106a192", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 1031059, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:38.266212+00:00", + "tier": "working", + "url": "/api/datasets/spec_8a4676c4abdf43d105aeff9d4ba9299b/cv_50e17ab9c2e732f13c48cf2028ac5928/files/sha256:cf2a4a97cc0fdfeb74ce021502e58c70d87ae4d67dc061a46fa62bb4f106a192" + }, + { + "artifact_digest": "sha256:1a9852b1499a841264af878b70b999a25b104804e6ae1825dcfaabd5eab989bd", + "rendering": { + "statistics": "series" + }, + "bytes": 984263, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:06:38.266212+00:00", + "tier": "working", + "url": "/api/datasets/spec_8a4676c4abdf43d105aeff9d4ba9299b/cv_50e17ab9c2e732f13c48cf2028ac5928/files/sha256:1a9852b1499a841264af878b70b999a25b104804e6ae1825dcfaabd5eab989bd" + } + ], + "series_count": 21438, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 172 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 241 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 8 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 172, + "covered": 50 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AndrewCarnegieFoundation", + "label": "Andrew Carnegie Foundation" + }, + { + "ref": "ArabFundForEconomicAndSocialDevelopment", + "label": "Arab Fund for Economic and Social Development" + }, + { + "ref": "Arcadia", + "label": "Arcadia" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianInfrastructureInvestmentBank", + "label": "Asian Infrastructure Investment Bank" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 172, + "covered": 172 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 241, + "covered": 146 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 241, + "covered": 144 + }, + "missing": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)" + } + ], + "truncated": true + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 241, + "covered": 241 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 241, + "covered": 241 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 241, + "covered": 241 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [ + "financingRecipient" + ], + "pivots": [ + { + "index": "financingProvider", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 8 + } + ] + }, + { + "index": "financingProvider", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 241 + } + ] + }, + { + "index": "financingRecipient", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "time_period", + "distinct": 8 + } + ] + }, + { + "index": "financingRecipient", + "columns": "time_period", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + }, + { + "index": "time_period", + "columns": "financingProvider", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingRecipient", + "distinct": 241 + } + ] + }, + { + "index": "time_period", + "columns": "financingRecipient", + "state": "unavailable", + "reason": "pivot_not_unique", + "varying": [ + { + "column": "financingProvider", + "distinct": 172 + } + ] + } + ], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:06:38.266048Z" + } + } + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "variable_text": "dataset", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "facets": { + "provenance": { + "ref": "provenance/OECDDAC2A", + "state": "value" + } + }, + "entities": {}, + "open_roles": [ + "destination" + ], + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2024, + "start_year": 2017 + } + } + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "7a2237593d79419a816a8040aee2a734" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "7a2237593d79419a816a8040aee2a734", + "warnings": [], + "timing_ms": { + "total": 1680, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "dataset", + "warnings": [ + { + "code": "role_scope_defaulted", + "severity": "warn", + "message": "no recipient was named; the answer was resolved across the 241 recipients with data." + }, + { + "code": "role_scope_defaulted", + "severity": "warn", + "message": "no provider was named; the answer was resolved across every provider with data." + } + ], + "timing_ms": { + "total": 1217, + "by_step": { + "validate": 0, + "walk": 7, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 1003, + "bind": 0, + "where_places": 0, + "materialise": 188, + "answer": 5, + "options": 14 + } + }, + "operations": [], + "departures": [], + "assumptions": [ + { + "kind": "open_role", + "binding_ref": "origin:", + "text": "every provider", + "refs": [] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_8a4676c4abdf43d105aeff9d4ba9299b", + "definition": { + "schema_version": 1, + "spec_id": "spec_8a4676c4abdf43d105aeff9d4ba9299b", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2017, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + }, + "open_roles": [ + "destination" + ] + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2017, + "end_year": 2024 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2017", + "end": "2024" + } + }, + "entities": [], + "coverage": { + "kind": "breadth", + "has_data": true, + "dimensions": [ + { + "label": "recipients", + "count": 241 + }, + { + "label": "sources", + "count": 1 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2017, + "end_year": 2024 + } + }, + "headline": { + "year": 2024, + "year_named": true, + "named_window": { + "start_year": 2017, + "end_year": 2024 + }, + "observations": 15402, + "series": 15402, + "role_counts": { + "financingProvider": 148, + "financingRecipient": 234 + }, + "recent_years": [ + { + "year": 2024, + "observations": 15402, + "series": 15402, + "role_counts": { + "financingProvider": 148, + "financingRecipient": 234 + } + }, + { + "year": 2023, + "observations": 15579, + "series": 15579, + "role_counts": { + "financingProvider": 156, + "financingRecipient": 234 + } + }, + { + "year": 2022, + "observations": 16403, + "series": 16403, + "role_counts": { + "financingProvider": 162, + "financingRecipient": 235 + } + } + ] + }, + "download": { + "rows": 123015, + "rows_exact": true, + "series": 21438, + "window": { + "start_year": 2017, + "end_year": 2024 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "scope": { + "axis": "destination", + "members": [ + { + "ref": "AfricanDevelopmentBank", + "label": "African Development Bank", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "AsianDevelopmentBank", + "label": "Asian Development Bank", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "AsianDevelopmentBankSpecialFunds", + "label": "Asian Development Bank Special Funds", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "CaribbeanDevelopmentBank", + "label": "Caribbean Development Bank", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "CentralAmericanBankForEconomicIntegration", + "label": "Central American Bank for Economic Integration", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "DACACPCountries", + "label": "ACP countries (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACAfrica", + "label": "Africa (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACAfricaUnallocated", + "label": "Africa, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACAllMultilateralRecipients", + "label": "all multilateral recipients (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACAllRecipients", + "label": "all recipients (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACAmerica", + "label": "America (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACAmericaUnallocated", + "label": "America, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACAsia", + "label": "Asia (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACAsiaUnallocated", + "label": "Asia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACBilateralUnallocated", + "label": "Bilateral, unallocated (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACCaribbean", + "label": "Caribbean (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACCaribbeanAndCentralAmerica", + "label": "Caribbean and Central America (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACCaribbeanAndCentralAmericaUnallocated", + "label": "Caribbean and Central America, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACCaribbeanUnallocated", + "label": "Caribbean, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACCentralAmerica", + "label": "Central America (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACCentralAmericaUnallocated", + "label": "Central America, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACCentralAndEasternEuropeanCountries", + "label": "Central and Eastern European countries (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACCentralAsiaUnallocated", + "label": "Central Asia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACClubDuSahelCountries", + "label": "Club du Sahel countries (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACDevelopingCountries", + "label": "developing countries (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACEasternAfrica", + "label": "Eastern Africa (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACEasternAfricaUnallocated", + "label": "Eastern Africa, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACEurope", + "label": "Europe (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACEuropeUnallocated", + "label": "Europe, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACExYugoslaviaUnallocated", + "label": "States of the former Yugoslavia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACFarEastAsia", + "label": "Far East Asia (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACFarEastAsiaUnallocated", + "label": "Far East Asia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACFragileStates", + "label": "fragile states (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACLowerMiddleIncomeCountries", + "label": "lower middle-income countries (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACMelanesia", + "label": "Melanesia (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACMelanesiaUnallocated", + "label": "Melanesia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACMicronesia", + "label": "Micronesia (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACMicronesiaUnallocated", + "label": "Micronesia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACMiddleAfrica", + "label": "Middle Africa (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACMiddleAfricaUnallocated", + "label": "Middle Africa, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACMiddleEast", + "label": "Middle East (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACMiddleEastUnallocated", + "label": "Middle East, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACMoreAdvancedDevelopingCountriesAndTerritories", + "label": "more advanced developing countries and territories (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACNewIndependentStates", + "label": "New Independent States of the former Soviet Union (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACNorthOfSahara", + "label": "North of Sahara (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACNorthOfSaharaUnallocated", + "label": "North of Sahara, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACOceania", + "label": "Oceania (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACOceaniaUnallocated", + "label": "Oceania, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACOtherEUInstitutions", + "label": "other EU institutions (DAC)", + "entity_type": "DACUnspecifiedParty", + "role": "destination" + }, + { + "ref": "DACOtherLowIncomeCountries", + "label": "other low-income countries (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACOtherMultilateralRecipient", + "label": "other multilateral recipient (DAC)", + "entity_type": "DACUnspecifiedParty", + "role": "destination" + }, + { + "ref": "DACOtherRegionalDevelopmentBanks", + "label": "other regional development banks (DAC)", + "entity_type": "DACUnspecifiedParty", + "role": "destination" + }, + { + "ref": "DACOtherUnitedNations", + "label": "other United Nations entities (DAC)", + "entity_type": "DACUnspecifiedParty", + "role": "destination" + }, + { + "ref": "DACOtherWorldBank", + "label": "other World Bank (DAC)", + "entity_type": "DACUnspecifiedParty", + "role": "destination" + }, + { + "ref": "DACPolynesia", + "label": "Polynesia (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACPolynesiaUnallocated", + "label": "Polynesia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACSmallIslandStates", + "label": "small island states (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACSouthAmerica", + "label": "South America (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACSouthAmericaUnallocated", + "label": "South America, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACSouthAndCentralAsia", + "label": "South and Central Asia (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACSouthAndCentralAsiaUnallocated", + "label": "South and Central Asia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACSouthAsiaUnallocated", + "label": "South Asia, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACSouthOfSahara", + "label": "South of Sahara (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACSouthOfSaharaUnallocated", + "label": "South of Sahara, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACSouthernAfrica", + "label": "Southern Africa (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACSouthernAfricaUnallocated", + "label": "Southern Africa, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "DACUnallocatedByIncome", + "label": "unallocated by income (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACUpperMiddleIncomeCountries", + "label": "upper middle-income countries (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACWesternAfrica", + "label": "Western Africa (DAC)", + "entity_type": "DACGroup", + "role": "destination" + }, + { + "ref": "DACWesternAfricaUnallocated", + "label": "Western Africa, unallocated by country (DAC)", + "entity_type": "DACRecipientUnallocatedByCountry", + "role": "destination" + }, + { + "ref": "EuropeanCommission", + "label": "European Commission", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "EuropeanInvestmentBank", + "label": "European Investment Bank", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "EuropeanUnionInstitutions", + "label": "European Union institutions", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "HeavilyIndebtedPoorCountries", + "label": "heavily indebted poor countries (IMF and World Bank)", + "entity_type": "Grouping", + "role": "destination" + }, + { + "ref": "InterAmericanDevelopmentBank", + "label": "Inter-American Development Bank", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "InterAmericanDevelopmentBankFundForSpecialOperations", + "label": "Inter-American Development Bank Fund for Special Operations", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "InternationalBankForReconstructionAndDevelopment", + "label": "International Bank for Reconstruction and Development", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "InternationalDevelopmentAssociation", + "label": "International Development Association", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "InternationalFinanceCorporation", + "label": "International Finance Corporation", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "InternationalFundForAgriculturalDevelopment", + "label": "International Fund for Agricultural Development", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "InternationalMonetaryFund", + "label": "International Monetary Fund", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "UNLandlockedDevelopingCountries", + "label": "landlocked developing countries (UN)", + "entity_type": "UNCountryDevelopmentGroup", + "role": "destination" + }, + { + "ref": "UNLeastDevelopedCountries", + "label": "least developed countries (UN)", + "entity_type": "UNCountryDevelopmentGroup", + "role": "destination" + }, + { + "ref": "UNRWA", + "label": "United Nations Relief and Works Agency for Palestine Refugees in the Near East", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "UnitedNationsChildrensFund", + "label": "United Nations Children's Fund", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "UnitedNationsDevelopmentProgramme", + "label": "United Nations Development Programme", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "UnitedNationsHighCommissionerForRefugees", + "label": "Office of the United Nations High Commissioner for Refugees", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "UnitedNationsPopulationFund", + "label": "United Nations Population Fund", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "WorldBankHighIncome", + "label": "high income (World Bank)", + "entity_type": "WorldBankIncomeGroup", + "role": "destination" + }, + { + "ref": "WorldBankLowIncome", + "label": "low income (World Bank)", + "entity_type": "WorldBankIncomeGroup", + "role": "destination" + }, + { + "ref": "WorldBankLowerMiddleIncome", + "label": "lower middle income (World Bank)", + "entity_type": "WorldBankIncomeGroup", + "role": "destination" + }, + { + "ref": "WorldBankNotClassifiedByIncome", + "label": "not classified by income (World Bank)", + "entity_type": "WorldBankIncomeGroup", + "role": "destination" + }, + { + "ref": "WorldBankUpperMiddleIncome", + "label": "upper middle income (World Bank)", + "entity_type": "WorldBankIncomeGroup", + "role": "destination" + }, + { + "ref": "WorldFoodProgramme", + "label": "World Food Programme", + "entity_type": "Organization", + "role": "destination" + }, + { + "ref": "country/AFG", + "label": "Afghanistan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AGO", + "label": "Angola", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ALB", + "label": "Albania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ARG", + "label": "Argentina", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ARM", + "label": "Armenia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ATG", + "label": "Antigua and Barbuda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/AZE", + "label": "Azerbaijan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BDI", + "label": "Burundi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BEN", + "label": "Benin", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BFA", + "label": "Burkina Faso", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BGD", + "label": "Bangladesh", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BIH", + "label": "Bosnia and Herzegovina", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BLR", + "label": "Belarus", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BLZ", + "label": "Belize", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BOL", + "label": "Bolivia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BRA", + "label": "Brazil", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BTN", + "label": "Bhutan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/BWA", + "label": "Botswana", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CAF", + "label": "Central African Republic", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CHL", + "label": "Chile", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CHN", + "label": "People's Republic of China", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CIV", + "label": "Ivory Coast", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CMR", + "label": "Cameroon", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COD", + "label": "Democratic Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COG", + "label": "Republic of the Congo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COK", + "label": "Cook Islands", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COL", + "label": "Colombia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/COM", + "label": "Comoros", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CPV", + "label": "Cape Verde", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CRI", + "label": "Costa Rica", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/CUB", + "label": "Cuba", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DJI", + "label": "Djibouti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DMA", + "label": "Dominica", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DOM", + "label": "Dominican Republic", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/DZA", + "label": "Algeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ECU", + "label": "Ecuador", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/EGY", + "label": "Egypt", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ERI", + "label": "Eritrea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/FJI", + "label": "Fiji", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/FSM", + "label": "Micronesia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GAB", + "label": "Gabon", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GEO", + "label": "Georgia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GHA", + "label": "Ghana", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GIN", + "label": "Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GMB", + "label": "The Gambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNB", + "label": "Guinea-Bissau", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GNQ", + "label": "Equatorial Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GRD", + "label": "Grenada", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GTM", + "label": "Guatemala", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/GUY", + "label": "Guyana", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/HND", + "label": "Honduras", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/HTI", + "label": "Haiti", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/IDN", + "label": "Indonesia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/IND", + "label": "India", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/IRN", + "label": "Iran", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/IRQ", + "label": "Iraq", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/JAM", + "label": "Jamaica", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/JOR", + "label": "Jordan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KAZ", + "label": "Kazakhstan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KGZ", + "label": "Kyrgyzstan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KHM", + "label": "Cambodia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/KIR", + "label": "Kiribati", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LAO", + "label": "Laos", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LBN", + "label": "Lebanon", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LBR", + "label": "Liberia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LBY", + "label": "Libya", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LCA", + "label": "Saint Lucia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LKA", + "label": "Sri Lanka", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/LSO", + "label": "Lesotho", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MAR", + "label": "Morocco", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MDA", + "label": "Moldova", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MDG", + "label": "Madagascar", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MDV", + "label": "Maldives", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MEX", + "label": "Mexico", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MHL", + "label": "Marshall Islands", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MKD", + "label": "North Macedonia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MLI", + "label": "Mali", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MMR", + "label": "Myanmar [Burma]", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MNE", + "label": "Montenegro", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MNG", + "label": "Mongolia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MOZ", + "label": "Mozambique", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MRT", + "label": "Mauritania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MSR", + "label": "Montserrat", + "entity_type": "AdministrativeArea1", + "role": "destination" + }, + { + "ref": "country/MUS", + "label": "Mauritius", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MWI", + "label": "Malawi", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/MYS", + "label": "Malaysia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NAM", + "label": "Namibia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NER", + "label": "Niger", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NGA", + "label": "Nigeria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NIC", + "label": "Nicaragua", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NIU", + "label": "Niue", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NPL", + "label": "Nepal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/NRU", + "label": "Nauru", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PAK", + "label": "Pakistan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PAN", + "label": "Panama", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PER", + "label": "Peru", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PHL", + "label": "Philippines", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PLW", + "label": "Palau", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PNG", + "label": "Papua New Guinea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PRK", + "label": "North Korea", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PRY", + "label": "Paraguay", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/PSE", + "label": "State of Palestine", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/RWA", + "label": "Rwanda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SDN", + "label": "Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SEN", + "label": "Senegal", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SHN", + "label": "Saint Helena, Ascension and Tristan da Cunha", + "entity_type": "AdministrativeArea1", + "role": "destination" + }, + { + "ref": "country/SLB", + "label": "Solomon Islands", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLE", + "label": "Sierra Leone", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SLV", + "label": "El Salvador", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SOM", + "label": "Somalia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SRB", + "label": "Serbia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SSD", + "label": "South Sudan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/STP", + "label": "São Tomé and Príncipe", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SUR", + "label": "Suriname", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SWZ", + "label": "Swaziland", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SYC", + "label": "Seychelles", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/SYR", + "label": "Syria", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TCD", + "label": "Chad", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TGO", + "label": "Togo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/THA", + "label": "Thailand", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TJK", + "label": "Tajikistan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TKL", + "label": "Tokelau", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TKM", + "label": "Turkmenistan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TLS", + "label": "Timor-Leste", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TON", + "label": "Tonga", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TUN", + "label": "Tunisia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TUR", + "label": "Turkey", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TUV", + "label": "Tuvalu", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/TZA", + "label": "Tanzania", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/UGA", + "label": "Uganda", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/UKR", + "label": "Ukraine", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/URY", + "label": "Uruguay", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/UZB", + "label": "Uzbekistan", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/VCT", + "label": "Saint Vincent and the Grenadines", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/VEN", + "label": "Venezuela", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/VNM", + "label": "Vietnam", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/VUT", + "label": "Vanuatu", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/WLF", + "label": "Wallis and Futuna", + "entity_type": "AdministrativeArea", + "role": "destination" + }, + { + "ref": "country/WSM", + "label": "Samoa", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/XKS", + "label": "Kosovo", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/YEM", + "label": "Yemen", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZAF", + "label": "South Africa", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZMB", + "label": "Zambia", + "entity_type": "Country", + "role": "destination" + }, + { + "ref": "country/ZWE", + "label": "Zimbabwe", + "entity_type": "Country", + "role": "destination" + } + ] + }, + "facets": { + "provenance": { + "basis": "bound", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 26525, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 119269, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 52151, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 15005, + "served_rows_exact": false + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 50159, + "served_rows_exact": false + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [ + { + "role": "destination", + "options": [], + "truncated": true, + "source": "observed" + }, + { + "role": "origin", + "options": [], + "truncated": true, + "source": "observed" + } + ], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross disbursements to 241 recipients from 172 providers for official development assistance, 2017 to 2024. Current US dollars · OECD DAC2A.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "241 recipients", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "172 providers", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2017 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2A", + "axis": "source", + "segment": "byline", + "binding_ref": "source:", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + } + ], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2017, + "end_year": 2024 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_de034b2632a047bf6b7f6c8fdf1b172e", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": {}, + "requested_window": { + "kind": "range", + "start_year": 2017, + "end_year": 2024 + }, + "facets": { + "provenance": { + "state": "value", + "ref": "provenance/OECDDAC2A" + } + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 125252, + "served_rows_exact": false + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "role_axis_facts": [ + { + "role": "destination", + "member_count": 241, + "members_available": true + }, + { + "role": "origin", + "member_count": 172, + "members_available": true + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "current_years": { + "start_year": 2017, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "current_years": { + "start_year": 2017, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "current_years": { + "start_year": 2017, + "end_year": 2019 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2019 + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "current_years": { + "start_year": 2023, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2023 + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "current_years": { + "start_year": 2017, + "end_year": 2020 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2010, + "base_year_max": 2020 + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2017, + "end_year": 2023 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2018, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "current_years": { + "start_year": 2018, + "end_year": 2021 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2023, + "base_year_max": 2025 + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2017, + "end_year": 2024 + }, + "constant_years": { + "start_year": 2017, + "end_year": 2024 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": {} + } + } + } + } + ], + "rendered_sentence": "Gross disbursements to 241 recipients from 172 providers for official development assistance, 2017 to 2024. Current US dollars · OECD DAC2A. Assumed: every provider.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "241 recipients", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "172 providers", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2017 to 2024", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2A", + "axis": "source", + "segment": "byline", + "binding_ref": "source:", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "every provider", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_8a4676c4abdf43d105aeff9d4ba9299b/cv_50e17ab9c2e732f13c48cf2028ac5928/files/sha256:cf2a4a97cc0fdfeb74ce021502e58c70d87ae4d67dc061a46fa62bb4f106a192" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3Acf2a4a97cc0fdfeb74ce021502e58c70d87ae4d67dc061a46fa62bb4f106a192?X-Goog-Signature=redacted", + "x-dfo-trace-id": "3bf6929fd74b42ca953c352829d86745" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3Acf2a4a97cc0fdfeb74ce021502e58c70d87ae4d67dc061a46fa62bb4f106a192?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "e9f4912dd1e54c8491dd021b356724c3" + }, + "body_file": "operation-resume.parquet" + } + } + ], + "expect": [ + { + "operation": { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "status": "pending" + } + }, + { + "dataset": { + "rows": 123015, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [], + "spec_id": "spec_8a4676c4abdf43d105aeff9d4ba9299b", + "content_version": "cv_50e17ab9c2e732f13c48cf2028ac5928", + "sentence": "Gross disbursements to 241 recipients from 172 providers for official development assistance, 2017 to 2024. Current US dollars · OECD DAC2A." + } + ], + "missing": [], + "long_builds": [ + { + "operation_id": "op_33dee3c9711dcc7f5f4f12d8b76c44f96c6be64f38521f5d5724e844495a5445", + "poll_waits": [ + 1.5, + 1.5, + 1.5, + 1.5, + 1.518, + 1.901, + 2.381, + 2.979, + 3.729, + 4.696 + ], + "resubmissions": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.parquet b/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.parquet new file mode 100644 index 0000000..c7a5f31 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/operation-resume.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/scenarios/resubmit-candidates-sibling.json b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-candidates-sibling.json new file mode 100644 index 0000000..22deeff --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-candidates-sibling.json @@ -0,0 +1,5677 @@ +{ + "format_version": 1, + "name": "resubmit-candidates-sibling", + "description": "Choosing candidate 0 on part 0 of an answer with two candidates parts posts part 1 as a candidates entry: its candidate set in the server's order, each with its identity, and its ordering and truncated echoed. Part 1 answers candidates again in the same order.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:07:14Z" + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany and tax revenue of Kenya from 2015 to 2022" + }, + { + "op": "choose", + "part": 0, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany and tax revenue of Kenya from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "7fc0d6eea9ea4a649201c235973bb649" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany and tax revenue of Kenya from 2015 to 2022", + "normalized_query": "GNI of Germany and tax revenue of Kenya from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "7fc0d6eea9ea4a649201c235973bb649", + "warnings": [], + "timing_ms": { + "total": 4462, + "by_step": { + "coverage": 0, + "extract": 992 + } + }, + "llm_usage": { + "input_tokens": 11842, + "output_tokens": 437, + "cached_tokens": 862 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 1879, + "by_step": { + "recall": 1, + "shape_arcs": 2, + "shape_probe_coverage": 3, + "shape_probe": 255, + "shape_groups": 22, + "shape_labels": 7, + "shape_admission": 0, + "shape": 1035, + "bind": 839, + "materialise": 1, + "answer": 3 + } + }, + "rendered_sentence": "3 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + }, + { + "text": "Kenya" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "definition": { + "schema_version": 1, + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_bef1fcb184525d3bbe7cd6a0316b4a35", + "definition": { + "schema_version": 1, + "spec_id": "spec_bef1fcb184525d3bbe7cd6a0316b4a35", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity in international dollars in Germany and Kenya, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_b77d2ebaaeb7e6d5f8499a8b0e3571a1", + "definition": { + "schema_version": 1, + "spec_id": "spec_b77d2ebaaeb7e6d5f8499a8b0e3571a1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_9ce16f72ff8416d06a56f9fe82b10ad3": [], + "spec_bef1fcb184525d3bbe7cd6a0316b4a35": [], + "spec_b77d2ebaaeb7e6d5f8499a8b0e3571a1": [] + } + }, + { + "variable_text": "tax revenue", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 3302, + "by_step": { + "recall": 797, + "shape_arcs": 1, + "shape_probe_coverage": 1, + "shape_probe": 211, + "shape_groups": 24, + "shape_labels": 0, + "shape_admission": 0, + "shape": 958, + "bind": 891, + "materialise": 152, + "answer": 504 + } + }, + "rendered_sentence": "2 readings. Total government revenue, in local currency in Germany and Kenya. SDG Global Database · 2015 to 2022. Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya. SDG Global Database · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Total government revenue, in local currency", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Total bugetary revenue of the central government as a proportion of GDP", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "tax revenue", + "entities": [ + { + "text": "Germany" + }, + { + "text": "Kenya" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_121a500dac8691cd699ac577bfab47a0", + "definition": { + "schema_version": 1, + "spec_id": "spec_121a500dac8691cd699ac577bfab47a0", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "undata/sdg/SERIES-GR_G14_XDC", + "measured_property": "value", + "stat_type": "measuredValue" + }, + "slots": [], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "undata/sdg/series-gr_g14_xdc_value_measuredvalue", + "label": "Total government revenue, in local currency", + "population_type": { + "ref": "undata/sdg/SERIES-GR_G14_XDC", + "label": "Total government revenue, in local currency" + }, + "measured_property": { + "ref": "value", + "label": "value" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "a28ecf2dacf37e649080b176e0cab12f467a0af085fd4d9f5396d97b1c730597", + "refine_supported": true, + "data_commons": [ + { + "id": "un_system", + "label": "UN System Data Commons" + } + ], + "upstream": { + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + } + } + }, + "slots": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + }, + "unit": { + "basis": "fallback", + "ref": "undata/UNIT_MEASURE-CR_LCU", + "label": "Local currency" + } + }, + "slot_options": [], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "undata/UNIT_MEASURE-CR_LCU", + "label": "Local currency" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Total government revenue, in local currency in Germany and Kenya, 2015 to 2022. SDG Global Database.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Total government revenue, in local currency", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "SDG Global Database", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + } + ], + "slot_filters": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "medium", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_2de7abdab14ea1a63e82fd9eed8fd9e1", + "definition": { + "schema_version": 1, + "spec_id": "spec_2de7abdab14ea1a63e82fd9eed8fd9e1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "undata/sdg/SERIES-GR_G14_GDP", + "measured_property": "value", + "stat_type": "measuredValue" + }, + "slots": [], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "undata/sdg/series-gr_g14_gdp_value_measuredvalue", + "label": "Total bugetary revenue of the central government as a proportion of GDP", + "population_type": { + "ref": "undata/sdg/SERIES-GR_G14_GDP", + "label": "Total bugetary revenue of the central government as a proportion of GDP" + }, + "measured_property": { + "ref": "value", + "label": "value" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "701aca5bb048e7cfed0d4f9a49ffef4448dec8d682c9c6d4d7a4e6c33f639ecd", + "refine_supported": true, + "data_commons": [ + { + "id": "un_system", + "label": "UN System Data Commons" + } + ], + "upstream": { + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + } + } + }, + "slots": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + }, + "unit": { + "basis": "fallback", + "ref": "Percent", + "label": "Percent" + } + }, + "slot_options": [], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "Percent", + "label": "Percent" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya, 2015 to 2022. SDG Global Database.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Total bugetary revenue of the central government as a proportion of GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "SDG Global Database", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + } + ], + "slot_filters": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "medium", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_121a500dac8691cd699ac577bfab47a0": [], + "spec_2de7abdab14ea1a63e82fd9eed8fd9e1": [] + } + } + ], + "rendered_sentence": "GNI has 3 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Tax revenue has 2 readings. Total government revenue, in local currency in Germany and Kenya. SDG Global Database · 2015 to 2022. Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya. SDG Global Database · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GNI", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " has 3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Tax revenue", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " has 2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Total government revenue, in local currency", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Total bugetary revenue of the central government as a proportion of GDP", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "candidates" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [], + "variable_text": "GNI" + }, + { + "entry_kind": "candidates", + "ordering": "intent_rank", + "truncated": false, + "candidates": [ + { + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "undata/sdg/SERIES-GR_G14_XDC", + "measured_property": "value", + "stat_type": "measuredValue" + }, + "slots": [], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [] + }, + { + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "undata/sdg/SERIES-GR_G14_GDP", + "measured_property": "value", + "stat_type": "measuredValue" + }, + "slots": [], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [] + } + ], + "variable_text": "tax revenue" + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4763dc6052244fba8ba9aa7f29e3bb61" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4763dc6052244fba8ba9aa7f29e3bb61", + "warnings": [], + "timing_ms": { + "total": 173, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 0, + "materialise": 1, + "answer": 0, + "options": 0 + } + }, + "operations": [], + "departures": [ + { + "code": "entity_unavailable", + "binding_ref": "where:", + "text": "You asked for Kenya. The data holds no values for it." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "definition": { + "schema_version": 1, + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + }, + { + "variable_text": "tax revenue", + "warnings": [], + "timing_ms": { + "total": 3, + "by_step": { + "validate": 0, + "walk": 0, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 0, + "materialise": 1, + "answer": 2, + "options": 0 + } + }, + "rendered_sentence": "2 readings. Total government revenue, in local currency in Germany and Kenya. SDG Global Database · 2015 to 2022. Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya. SDG Global Database · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Total government revenue, in local currency", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Total bugetary revenue of the central government as a proportion of GDP", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_121a500dac8691cd699ac577bfab47a0", + "definition": { + "schema_version": 1, + "spec_id": "spec_121a500dac8691cd699ac577bfab47a0", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "undata/sdg/SERIES-GR_G14_XDC", + "measured_property": "value", + "stat_type": "measuredValue" + }, + "slots": [], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "undata/sdg/series-gr_g14_xdc_value_measuredvalue", + "label": "Total government revenue, in local currency", + "population_type": { + "ref": "undata/sdg/SERIES-GR_G14_XDC", + "label": "Total government revenue, in local currency" + }, + "measured_property": { + "ref": "value", + "label": "value" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "a28ecf2dacf37e649080b176e0cab12f467a0af085fd4d9f5396d97b1c730597", + "refine_supported": true, + "data_commons": [ + { + "id": "un_system", + "label": "UN System Data Commons" + } + ], + "upstream": { + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + } + } + }, + "slots": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + }, + "unit": { + "basis": "fallback", + "ref": "undata/UNIT_MEASURE-CR_LCU", + "label": "Local currency" + } + }, + "slot_options": [], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "undata/UNIT_MEASURE-CR_LCU", + "label": "Local currency" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Total government revenue, in local currency in Germany and Kenya, 2015 to 2022. SDG Global Database.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Total government revenue, in local currency", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "SDG Global Database", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + } + ], + "slot_filters": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + }, + { + "spec_id": "spec_2de7abdab14ea1a63e82fd9eed8fd9e1", + "definition": { + "schema_version": 1, + "spec_id": "spec_2de7abdab14ea1a63e82fd9eed8fd9e1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "undata/sdg/SERIES-GR_G14_GDP", + "measured_property": "value", + "stat_type": "measuredValue" + }, + "slots": [], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "undata/sdg/series-gr_g14_gdp_value_measuredvalue", + "label": "Total bugetary revenue of the central government as a proportion of GDP", + "population_type": { + "ref": "undata/sdg/SERIES-GR_G14_GDP", + "label": "Total bugetary revenue of the central government as a proportion of GDP" + }, + "measured_property": { + "ref": "value", + "label": "value" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "701aca5bb048e7cfed0d4f9a49ffef4448dec8d682c9c6d4d7a4e6c33f639ecd", + "refine_supported": true, + "data_commons": [ + { + "id": "un_system", + "label": "UN System Data Commons" + } + ], + "upstream": { + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + } + } + }, + "slots": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + }, + "unit": { + "basis": "fallback", + "ref": "Percent", + "label": "Percent" + } + }, + "slot_options": [], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "Percent", + "label": "Percent" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya, 2015 to 2022. SDG Global Database.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Total bugetary revenue of the central government as a proportion of GDP", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "SDG Global Database", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "undata/p/SDG", + "label": "SDG Global Database", + "source": { + "ref": "undata/p/SDG", + "label": "SDG Global Database" + }, + "data_commons": { + "id": "un_system", + "label": "UN System Data Commons" + }, + "documentation": "/api/graph/documentation/undata/p/SDG" + } + ], + "slot_filters": [ + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_121a500dac8691cd699ac577bfab47a0": [], + "spec_2de7abdab14ea1a63e82fd9eed8fd9e1": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Tax revenue has 2 readings. Total government revenue, in local currency in Germany and Kenya. SDG Global Database · 2015 to 2022. Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya. SDG Global Database · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for Kenya. The data holds no values for it.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Tax revenue", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " has 2 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Total government revenue, in local currency", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Total bugetary revenue of the central government as a proportion of GDP", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "SDG Global Database", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "candidates", + "sentence": "GNI has 3 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Tax revenue has 2 readings. Total government revenue, in local currency in Germany and Kenya. SDG Global Database · 2015 to 2022. Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya. SDG Global Database · 2015 to 2022.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Tax revenue has 2 readings. Total government revenue, in local currency in Germany and Kenya. SDG Global Database · 2015 to 2022. Total bugetary revenue of the central government as a proportion of GDP in Germany and Kenya. SDG Global Database · 2015 to 2022.", + "complete": false, + "specs": [ + "spec_9ce16f72ff8416d06a56f9fe82b10ad3" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/resubmit-placeholder-without-restatement.json b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-placeholder-without-restatement.json new file mode 100644 index 0000000..44622b5 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/resubmit-placeholder-without-restatement.json @@ -0,0 +1,3419 @@ +{ + "format_version": 1, + "name": "resubmit-placeholder-without-restatement", + "description": "Choosing candidate 0 on part 0 posts part 1, a no_data part with no restatement, as a placeholder entry with its variable_text, status and reason.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:07:30Z" + }, + "call": [ + { + "op": "search", + "question": "GNI of Germany and debt of Kenya from 2015 to 2022" + }, + { + "op": "choose", + "part": 0, + "option": 0 + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "GNI of Germany and debt of Kenya from 2015 to 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "1516d9564a5a493fa7008b64841ffdc1" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "GNI of Germany and debt of Kenya from 2015 to 2022", + "normalized_query": "GNI of Germany and debt of Kenya from 2015 to 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "1516d9564a5a493fa7008b64841ffdc1", + "warnings": [], + "timing_ms": { + "total": 4391, + "by_step": { + "coverage": 0, + "extract": 1887 + } + }, + "llm_usage": { + "input_tokens": 12163, + "output_tokens": 848, + "cached_tokens": 2448 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 1770, + "by_step": { + "recall": 2, + "shape_arcs": 2, + "shape_probe_coverage": 8, + "shape_probe": 9, + "shape_groups": 28, + "shape_labels": 8, + "shape_admission": 1, + "shape": 852, + "bind": 913, + "materialise": 1, + "answer": 2 + } + }, + "rendered_sentence": "3 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022.", + "sentence_plan": [ + { + "kind": "text", + "text": "3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GNI", + "entities": [ + { + "text": "Germany" + }, + { + "text": "Kenya" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "candidates", + "candidates": { + "ordering": "intent_rank", + "max_candidates": 6, + "specs": [ + { + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "definition": { + "schema_version": 1, + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "distinguishes": true + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_bef1fcb184525d3bbe7cd6a0316b4a35", + "definition": { + "schema_version": 1, + "spec_id": "spec_bef1fcb184525d3bbe7cd6a0316b4a35", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity" + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity", + "label": "Gross National Income Based on Purchasing Power Parity", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "833b9da89613fa6c1775652daac2388f38204c6c9f9929ca113deed9a0d08369", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity in international dollars in Germany and Kenya, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + }, + { + "spec_id": "spec_b77d2ebaaeb7e6d5f8499a8b0e3571a1", + "definition": { + "schema_version": 1, + "spec_id": "spec_b77d2ebaaeb7e6d5f8499a8b0e3571a1", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicActivity", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "PurchasingPowerParity", + "measurement_denominator": { + "unresolved": true + } + }, + "slots": [ + { + "property": "activitySource", + "binding": { + "state": "value", + "ref": "GrossNationalIncome" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicactivity_amount_measuredvalue_purchasingpowerparity_per_unresolved", + "label": "Gross National Income Based on Purchasing Power Parity Per Capita", + "population_type": { + "ref": "EconomicActivity", + "label": "EconomicActivity" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "PurchasingPowerParity", + "label": "PurchasingPowerParity" + }, + "measurement_denominator": { + "ref": "PerCapita", + "label": "PerCapita" + }, + "measurement_denominator_unresolved": true, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "7b2d5b0fc09cfc0215c8d7c6c21a5195fa21e79f2a148a6bca9ce6c3af8bbb9f", + "refine_supported": true, + "data_commons": [ + { + "id": "base", + "label": "Data Commons by Google" + } + ], + "upstream": { + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + } + } + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": false, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 16, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 2 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 16, + "rows_exact": true, + "series": 2, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "Creative Commons Attribution License" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + }, + "unit": { + "basis": "fallback", + "ref": "InternationalDollar", + "label": "InternationalDollar" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "InternationalDollar", + "label": "InternationalDollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya, 2015 to 2022. World Development Indicators.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross national income based on purchasing power parity per capita", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:activitySource" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in international dollars", + "axis": "unit", + "segment": "heading", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "activitySource", + "binding_ref": "how:activitySource", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "World Development Indicators", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "distinguishes": true + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "dc/base/WorldDevelopmentIndicators", + "label": "World Development Indicators", + "source": { + "ref": "dc/s/WorldBank", + "label": "World Bank" + }, + "data_commons": { + "id": "base", + "label": "Data Commons by Google" + }, + "documentation": "/api/graph/documentation/dc/base/WorldDevelopmentIndicators" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "activitySource", + "label": "activitySource" + }, + "label": "activity source" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossNationalIncome", + "label": "GrossNationalIncome" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [ + "Amount_EconomicActivity_GrossDomesticProduction_NAICSAgricultureForestryFishingHunting_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSArtsEntertainmentRecreation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSConstruction_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSEducationalServices_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSHealthCareSocialAssistance_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSInformation_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSManagementOfCompaniesEnterprises_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSRealEstateRentalLeasing_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_NAICSUtilities_RealValue", + "Amount_EconomicActivity_GrossDomesticProduction_RealValue", + "InflationAdjustedGDP", + "RealValue_Amount_EconomicActivity_GrossValueAdded_AgricultureForestryFishingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ConstructionSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ElectricityGasSteamAirConditionSupply", + "RealValue_Amount_EconomicActivity_GrossValueAdded_FinanceService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_ManufacturingSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_MiningQuarrying", + "RealValue_Amount_EconomicActivity_GrossValueAdded_PublicAdministrationAndDefenceOrMOSPIOtherService", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSector", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TradeSectorOrTransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_Amount_EconomicActivity_GrossValueAdded_TransportStorageSectorOrPublishingBroadcastingInformationActivities", + "RealValue_GrowthRate_Amount_EconomicActivity_GrossDomesticProduction", + "dc/qt7ewllmt3826" + ] + } + }, + "confidence": "high", + "basis": "nominated", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [] + } + } + ], + "truncated": false + }, + "reading_assumptions": { + "spec_9ce16f72ff8416d06a56f9fe82b10ad3": [], + "spec_bef1fcb184525d3bbe7cd6a0316b4a35": [], + "spec_b77d2ebaaeb7e6d5f8499a8b0e3571a1": [] + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "retrieval_score_weak", + "severity": "info", + "message": "the chosen reading's match to the query is weak; treat it with less confidence than a strong match." + } + ], + "timing_ms": { + "total": 2495, + "by_step": { + "recall": 0, + "shape_arcs": 1, + "shape_probe_coverage": 51, + "shape_probe": 245, + "shape_groups": 3, + "shape_labels": 0, + "shape_admission": 0, + "shape": 912, + "bind": 1583 + } + }, + "rendered_sentence": "Could not tell who is giving and who is receiving among \"Germany\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"Germany\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "role_not_resolved", + "category": "unresolved", + "message": "Could not tell who is giving and who is receiving among \"Germany\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "entity_terms": [ + "Germany", + "Kenya" + ], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Germany", + "Kenya" + ], + "label": "Germany to Kenya", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Kenya", + "role_text": "to" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Germany", + "Kenya" + ], + "label": "Kenya to Germany", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "debt", + "entities": [ + { + "text": "Germany", + "role_text": "to" + }, + { + "text": "Kenya", + "role_text": "from" + } + ], + "time_text": "2015 to 2022", + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "GNI has 3 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Could not tell who is giving and who is receiving among \"Germany\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "slot", + "text": "GNI", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " has 3 readings.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Primary income", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "gross of fixed capital consumption", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "OECD DAC1", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Current US dollars", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Gross national income based on purchasing power parity per capita", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "in international dollars", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Germany and Kenya", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "World Development Indicators", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "2015 to 2022", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving among \"Germany\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "dataset_resubmit", + "entries": [ + { + "entry_kind": "identity", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + }, + "assumptions": [], + "variable_text": "GNI" + }, + { + "entry_kind": "placeholder", + "status": "no_data", + "reason": "role_not_resolved", + "variable_text": "debt" + } + ] + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "92d259a7691d424b9ec4d329f99e63fa" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "dataset_resubmit", + "extract_skipped": true + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "92d259a7691d424b9ec4d329f99e63fa", + "warnings": [], + "timing_ms": { + "total": 3, + "by_step": { + "coverage": 0 + } + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GNI", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "validate": 0, + "walk": 1, + "reread_arcs": 0, + "detect_edits": 0, + "resolve_survivors": 0, + "shape": 0, + "bind": 0, + "where_places": 0, + "materialise": 0, + "answer": 0, + "options": 0 + } + }, + "operations": [], + "departures": [ + { + "code": "entity_unavailable", + "binding_ref": "where:", + "text": "You asked for Kenya. The data holds no values for it." + } + ], + "assumptions": [], + "status": "definite", + "spec": { + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "definition": { + "schema_version": 1, + "spec_id": "spec_9ce16f72ff8416d06a56f9fe82b10ad3", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "EconomicUnit", + "measured_property": "primaryIncome", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "fixedCapitalConsumptionBasis", + "binding": { + "state": "value", + "ref": "GrossOfFixedCapitalConsumption" + } + } + ], + "entities": { + "observationAbout": [ + "country/DEU", + "country/KEN" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2015, + "end_year": 2022 + } + } + }, + "resolved": { + "shape": { + "shape_id": "economicunit_primaryincome_measuredvalue_nominal", + "label": "Gross national income", + "population_type": { + "ref": "EconomicUnit", + "label": "economic unit" + }, + "measured_property": { + "ref": "primaryIncome", + "label": "primary income" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "e118bc2c1c5ac817a6d4a269c5276b7d2c74f3033dde9cad5925de58239c55b4", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "set", + "values": [ + { + "ref": { + "ref": "country/DEU", + "label": "Germany" + }, + "value_kind": "entity" + }, + { + "ref": { + "ref": "country/KEN", + "label": "Kenya" + }, + "value_kind": "entity" + } + ] + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2015, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2015", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/DEU", + "label": "Germany", + "entity_type": "Country", + "role": "observationAbout" + }, + { + "ref": "country/KEN", + "label": "Kenya", + "entity_type": "Country", + "role": "observationAbout" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 8, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "countries", + "count": 1 + }, + { + "label": "observations", + "count": 8 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2015, + "end_year": 2022 + } + }, + "download": { + "rows": 8, + "rows_exact": true, + "series": 1, + "window": { + "start_year": 2015, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "options": [ + { + "value": { + "ref": { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": true, + "source": "observed" + } + ], + "entity_options": [], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1" + }, + "value_kind": "source" + } + }, + { + "value": { + "ref": { + "ref": "provenance/WorldBankInternationalDebtStatistics", + "label": "World Bank International Debt Statistics (IDS)" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ] + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC1", + "label": "OECD DAC1", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC1" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "fixedCapitalConsumptionBasis", + "label": "fixed capital consumption basis" + }, + "label": "fixed capital consumption basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "GrossOfFixedCapitalConsumption", + "label": "gross of fixed capital consumption" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "set", + "refs": [ + { + "ref": "country/DEU", + "label": "Germany" + }, + { + "ref": "country/KEN", + "label": "Kenya" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2015, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec" + }, + "confidence": "high", + "available_at_place": true, + "measure_label_axes": [], + "measure_axis_values": [], + "related_measures": [] + } + } + }, + { + "variable_text": "debt", + "warnings": [ + { + "code": "part_restated", + "severity": "info", + "message": "'debt' was restated from a posted no_data outcome; not re-resolved." + } + ], + "timing_ms": { + "total": 0 + }, + "rendered_sentence": "Could not tell who is giving and who is receiving in this query. Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving in this query. Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "role_not_resolved", + "category": "unresolved", + "message": "Could not tell who is giving and who is receiving in this query. Put \"from\" or \"to\" before a name.", + "entity_terms": [], + "ambiguous_entities": [], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [] + } + } + ], + "rendered_sentence": "Answered 1 of 2 parts. Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Could not tell who is giving and who is receiving in this query. Put \"from\" or \"to\" before a name.", + "sentence_plan": [ + { + "kind": "text", + "text": "Answered 1 of 2 parts.", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "coverage", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Primary income", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "gross of fixed capital consumption", + "axis": "how", + "segment": "heading", + "property_dcid": "fixedCapitalConsumptionBasis", + "binding_ref": "how:fixedCapitalConsumptionBasis", + "entity_refs": [], + "states": [ + "how:fixedCapitalConsumptionBasis" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " in ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Germany and Kenya", + "axis": "where", + "segment": "heading", + "binding_ref": "where:", + "entity_refs": [], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ", ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "2015 to 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "OECD DAC1", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for Kenya. The data holds no values for it.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "Could not tell who is giving and who is receiving in this query. Put \"from\" or \"to\" before a name.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 1 + } + ], + "status": "mixed" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "GNI has 3 readings. Primary income for gross of fixed capital consumption in Germany and Kenya. OECD DAC1 · 2015 to 2022 · Current US dollars. Gross national income based on purchasing power parity in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Gross national income based on purchasing power parity per capita in international dollars in Germany and Kenya. World Development Indicators · 2015 to 2022. Could not tell who is giving and who is receiving among \"Germany\" and \"Kenya\". Put \"from\" or \"to\" before a name.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 3 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "mixed", + "sentence": "Answered 1 of 2 parts. Primary income for gross of fixed capital consumption in Germany and Kenya, 2015 to 2022. Current US dollars · OECD DAC1. You asked for Kenya. The data holds no values for it. Could not tell who is giving and who is receiving in this query. Put \"from\" or \"to\" before a name.", + "complete": false, + "specs": [ + "spec_9ce16f72ff8416d06a56f9fe82b10ad3" + ], + "gaps": [ + { + "part": 1, + "kind": "choice", + "options": 0 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-body-not-an-object.json b/python/client-contract/src/dfo_client_contract/scenarios/search-body-not-an-object.json new file mode 100644 index 0000000..8ee2ace --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-body-not-an-object.json @@ -0,0 +1,250 @@ +{ + "format_version": 1, + "name": "search-body-not-an-object", + "description": "A Search response body that is not an object raises ContractError contract_violation.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The Search response body becomes a list holding the answer." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": [ + { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + ] + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-no-json-body.json b/python/client-contract/src/dfo_client_contract/scenarios/search-no-json-body.json new file mode 100644 index 0000000..269e29d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-no-json-body.json @@ -0,0 +1,47 @@ +{ + "format_version": 1, + "name": "search-no-json-body", + "description": "A 2xx Search response with no JSON body raises ContractError unexpected_response, with that response's trace id.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The search answers 200 with an empty text/html body and x-dfo-trace-id 33333333333333333333333333333333." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "text/html; charset=utf-8", + "x-dfo-trace-id": "33333333333333333333333333333333" + } + } + } + ], + "expect": [ + { + "error": { + "class": "ContractError", + "code": "unexpected_response", + "trace_id": "33333333333333333333333333333333" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous.json b/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous.json new file mode 100644 index 0000000..83f93ab --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous.json @@ -0,0 +1,258 @@ +{ + "format_version": 1, + "name": "search-place-ambiguous", + "description": "A question naming a place that matches two countries answers with one no_data part whose entity_ambiguous reason makes a choice gap, with one option per country: each option's data_query pins that country on the ambiguous wording.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:46Z" + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-rate-limited.json b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-rate-limited.json new file mode 100644 index 0000000..9c1e6d7 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-rate-limited.json @@ -0,0 +1,285 @@ +{ + "format_version": 1, + "name": "search-proxy-rate-limited", + "description": "The proxy's 429 body carries no code or retryable: error is the code and retry \"retry_after_delay\" makes it retryable, so the client waits the Retry-After seconds, retries, and reaches the same answer.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The website proxy's own 429 {error, retry, detail} with Retry-After 2 answers the first search." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 429, + "headers": { + "content-type": "application/json", + "retry-after": "2" + }, + "json": { + "error": "rate_limited", + "retry": "retry_after_delay", + "detail": "Too many requests from this address. Try again shortly." + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ], + "retry_waits": [ + 2.0 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-unavailable.json b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-unavailable.json new file mode 100644 index 0000000..8382069 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-proxy-unavailable.json @@ -0,0 +1,103 @@ +{ + "format_version": 1, + "name": "search-proxy-unavailable", + "description": "The proxy's 502 body is retryable through its retry member and has no Retry-After, so the client backs off and retries twice, then raises ServerError with the error member, transient_unavailable, as its code.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The website proxy's own 502 {error, retry, detail} answers the search and both retries." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 502, + "headers": { + "content-type": "application/json" + }, + "json": { + "error": "transient_unavailable", + "retry": "retry_after_delay", + "detail": "The Search API is unreachable." + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 502, + "headers": { + "content-type": "application/json" + }, + "json": { + "error": "transient_unavailable", + "retry": "retry_after_delay", + "detail": "The Search API is unreachable." + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 502, + "headers": { + "content-type": "application/json" + }, + "json": { + "error": "transient_unavailable", + "retry": "retry_after_delay", + "detail": "The Search API is unreachable." + } + } + } + ], + "expect": [ + { + "error": { + "class": "ServerError", + "code": "transient_unavailable", + "trace_id": null, + "retry_waits": [ + 0.5, + 1.0 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-refused-without-code.json b/python/client-contract/src/dfo_client_contract/scenarios/search-refused-without-code.json new file mode 100644 index 0000000..5cb7282 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-refused-without-code.json @@ -0,0 +1,54 @@ +{ + "format_version": 1, + "name": "search-refused-without-code", + "description": "A problem document with no code raises refusal_without_code with the class its status maps to, and keeps its body's retryable and trace_id, so a retryable false 503 is not retried and its trace id is the body's, not the header's.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "A 503 problem document with no code, retryable false and trace_id 11111111111111111111111111111111 answers the search, with x-dfo-trace-id 22222222222222222222222222222222." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json", + "x-dfo-trace-id": "22222222222222222222222222222222" + }, + "json": { + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "trace_id": "11111111111111111111111111111111", + "retryable": false + } + } + } + ], + "expect": [ + { + "error": { + "class": "ServerError", + "code": "refusal_without_code", + "trace_id": "11111111111111111111111111111111" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-retry-after-503.json b/python/client-contract/src/dfo_client_contract/scenarios/search-retry-after-503.json new file mode 100644 index 0000000..e993fb6 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-retry-after-503.json @@ -0,0 +1,290 @@ +{ + "format_version": 1, + "name": "search-retry-after-503", + "description": "A retryable 503 problem with Retry-After is retried after the wait it names, and the search then reaches the same answer; the retry spends one of the two default retries.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "A 503 service_unavailable with retryable true and Retry-After 1 answers the first search." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 503, + "headers": { + "content-type": "application/problem+json", + "retry-after": "1" + }, + "json": { + "type": "/codes/service_unavailable", + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "code": "service_unavailable", + "trace_id": "00000000000000000000000000000000", + "capability_version": "synthetic", + "retryable": true + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ], + "retry_waits": [ + 1.0 + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-server-warning.json b/python/client-contract/src/dfo_client_contract/scenarios/search-server-warning.json new file mode 100644 index 0000000..1429b59 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-server-warning.json @@ -0,0 +1,755 @@ +{ + "format_version": 1, + "name": "search-server-warning", + "description": "An x-dfo-warning header issues server_warning once per process per message, and Deprecation and Sunset issue route_deprecated once per distinct pair of their values: the second search warns route_deprecated alone, and the third, a new pair and a new message, warns both.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The search is made three times. Its responses carry x-dfo-warning 'Search runs on a reduced index while it is rebuilt.', then the same with Sunset 'Sat, 01 May 2027 00:00:00 GMT', then 'Search answers from a cached release.' with Deprecation '@1777593600' and the same Sunset." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d", + "x-dfo-warning": "Search runs on a reduced index while it is rebuilt." + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d", + "x-dfo-warning": "Search runs on a reduced index while it is rebuilt.", + "sunset": "Sat, 01 May 2027 00:00:00 GMT" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d", + "x-dfo-warning": "Search answers from a cached release.", + "deprecation": "@1777593600", + "sunset": "Sat, 01 May 2027 00:00:00 GMT" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ], + "warnings": [ + "server_warning" + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ], + "warnings": [ + "route_deprecated" + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ], + "warnings": [ + "route_deprecated", + "server_warning" + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-sunset-warning.json b/python/client-contract/src/dfo_client_contract/scenarios/search-sunset-warning.json new file mode 100644 index 0000000..13fe4d0 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-sunset-warning.json @@ -0,0 +1,503 @@ +{ + "format_version": 1, + "name": "search-sunset-warning", + "description": "A Sunset header alone issues the route_deprecated warning, once per process per distinct value, so the second search, whose response carries the same value, warns nothing.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "The search is made twice, and each response carries Sunset 'Sat, 01 May 2027 00:00:00 GMT' with no Deprecation header." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + }, + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d", + "sunset": "Sat, 01 May 2027 00:00:00 GMT" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + }, + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "95b872cf11e44fffb92260b2bb583f0d", + "sunset": "Sat, 01 May 2027 00:00:00 GMT" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "ODA disbursements from Germany to Congo", + "normalized_query": "ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "95b872cf11e44fffb92260b2bb583f0d", + "warnings": [], + "timing_ms": { + "total": 1697, + "by_step": { + "coverage": 0, + "extract": 982 + } + }, + "llm_usage": { + "input_tokens": 2249, + "output_tokens": 154, + "cached_tokens": 859 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 715, + "by_step": { + "recall": 715 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ], + "warnings": [ + "route_deprecated" + ] + } + }, + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-two-parts-place-ambiguous.json b/python/client-contract/src/dfo_client_contract/scenarios/search-two-parts-place-ambiguous.json new file mode 100644 index 0000000..58073d3 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-two-parts-place-ambiguous.json @@ -0,0 +1,429 @@ +{ + "format_version": 1, + "name": "search-two-parts-place-ambiguous", + "description": "A two-part question naming a place that matches two countries answers no_data on both parts, each an entity_ambiguous choice gap with one option per country.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:48Z" + }, + "call": [ + { + "op": "search", + "question": "Kenya's GDP, and ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "Kenya's GDP, and ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "4a421114e5a2429284f5bb99860796e7" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "normalized_query": "Kenya's GDP, and ODA disbursements from Germany to Congo", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "4a421114e5a2429284f5bb99860796e7", + "warnings": [], + "timing_ms": { + "total": 1225, + "by_step": { + "coverage": 0, + "extract": 1221 + } + }, + "llm_usage": { + "input_tokens": 2256, + "output_tokens": 207, + "cached_tokens": 861 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "GDP", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "GDP", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + }, + { + "variable_text": "ODA disbursements", + "warnings": [], + "timing_ms": { + "total": 1, + "by_step": { + "recall": 1 + } + }, + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "restatement": { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to" + }, + { + "text": "Germany", + "role_text": "from" + }, + { + "text": "Congo", + "role_text": "to" + } + ], + "sources": [], + "operations": [] + }, + "operations": [], + "departures": [], + "assumptions": [], + "status": "no_data", + "no_data": { + "reason": "entity_ambiguous", + "category": "unresolved", + "message": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "entity_terms": [ + "Congo" + ], + "ambiguous_entities": [ + { + "text": "Congo", + "candidates": [ + { + "ref": "country/COD", + "label": "Congo [DRC]", + "kind": "country" + }, + { + "ref": "country/COG", + "label": "Congo [Republic]", + "kind": "country" + } + ] + } + ], + "source_terms": [], + "ambiguous_sources": [], + "unbound_qualifiers": [], + "options": [ + { + "mentions": [ + "Congo" + ], + "label": "Congo [DRC]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COD" + } + ], + "sources": [], + "operations": [] + } + ] + } + }, + { + "mentions": [ + "Congo" + ], + "label": "Congo [Republic]", + "data_query": { + "kind": "parsed", + "parts": [ + { + "variable_text": "ODA disbursements", + "entities": [ + { + "text": "Kenya", + "role_text": "to", + "dcid": "country/KEN" + }, + { + "text": "Germany", + "role_text": "from", + "dcid": "country/DEU" + }, + { + "text": "Congo", + "role_text": "to", + "dcid": "country/COG" + } + ], + "sources": [], + "operations": [] + } + ] + } + } + ] + } + } + ], + "rendered_sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "sentence_plan": [ + { + "kind": "text", + "text": "\"", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Congo", + "axis": "where", + "segment": "heading", + "role": "destination", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": "\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "segment": "heading", + "entity_refs": [], + "states": [] + } + ], + "status": "no_data" + } + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "no_data", + "sentence": "\"Congo\" matches more than one entity: \"Congo [DRC]\" and \"Congo [Republic]\". Be more specific.", + "complete": false, + "specs": [], + "gaps": [ + { + "part": 0, + "kind": "choice", + "options": 2 + }, + { + "part": 1, + "kind": "choice", + "options": 2 + } + ] + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-unauthorized.json b/python/client-contract/src/dfo_client_contract/scenarios/search-unauthorized.json new file mode 100644 index 0000000..0a65d0d --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-unauthorized.json @@ -0,0 +1,47 @@ +{ + "format_version": 1, + "name": "search-unauthorized", + "description": "A 401 resolves the key again; the key is unchanged, so the client sends nothing more and raises AuthenticationError refusal_without_code, whose trace id is the header's, since the refusal has no body.", + "origin": { + "kind": "synthetic", + "derived_from": "search-place-ambiguous", + "edit": "A bodiless 401 with x-dfo-trace-id 22222222222222222222222222222222 answers the search." + }, + "call": [ + { + "op": "search", + "question": "ODA disbursements from Germany to Congo" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "ODA disbursements from Germany to Congo" + } + } + }, + "response": { + "status": 401, + "headers": { + "www-authenticate": "Bearer", + "x-dfo-trace-id": "22222222222222222222222222222222" + } + } + } + ], + "expect": [ + { + "error": { + "class": "AuthenticationError", + "code": "refusal_without_code", + "trace_id": "22222222222222222222222222222222" + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.json b/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.json new file mode 100644 index 0000000..3d8e984 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.json @@ -0,0 +1,4056 @@ +{ + "format_version": 1, + "name": "search-warning-top5", + "description": "A question asking for a ranking answers one definite part that does not run the rank, with a departure and two warn-severity warnings. A strict fetch raises SearchWarning before any build; a fetch that is not strict builds the dataset and issues one SearchWarning for all of them.", + "origin": { + "kind": "recorded", + "base_url": "http://127.0.0.1:19493/api", + "dfo_commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "recorded_at": "2026-10-21T13:06:59Z" + }, + "call": [ + { + "op": "search", + "question": "top 5 donors to Ethiopia in 2022" + }, + { + "op": "fetch", + "strict": true + }, + { + "op": "fetch" + } + ], + "exchanges": [ + { + "request": { + "method": "POST", + "path": "/search/resolve", + "json": { + "schema_version": 1, + "input": { + "kind": "raw_text", + "query": "top 5 donors to Ethiopia in 2022" + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "2b349555f60d4b9aa5c17d3f59541531" + }, + "json": { + "schema_version": 1, + "query_echo": { + "entry_path": "raw_text", + "raw_query": "top 5 donors to Ethiopia in 2022", + "normalized_query": "top 5 donors to Ethiopia in 2022", + "extract_skipped": false + }, + "diagnostics": { + "engine_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "trace_id": "2b349555f60d4b9aa5c17d3f59541531", + "warnings": [], + "timing_ms": { + "total": 4816, + "by_step": { + "coverage": 0, + "extract": 1848 + } + }, + "llm_usage": { + "input_tokens": 6103, + "output_tokens": 381, + "cached_tokens": 860 + }, + "timed_out": false + }, + "kind": "resolution", + "parts": [ + { + "variable_text": "aid", + "warnings": [ + { + "code": "slot_defaulted", + "severity": "warn", + "message": "No aid type was named, so the answer covers official development assistance." + }, + { + "code": "role_scope_defaulted", + "severity": "warn", + "message": "no provider was named; the answer was resolved across every provider with data." + } + ], + "timing_ms": { + "total": 2929, + "by_step": { + "recall": 819, + "shape_arcs": 2, + "shape_probe_coverage": 2, + "shape_probe": 201, + "shape_groups": 2, + "shape_labels": 0, + "shape_admission": 1, + "shape": 935, + "bind": 1152, + "materialise": 12, + "answer": 8, + "options": 3 + } + }, + "restatement": { + "variable_text": "aid", + "entities": [ + { + "text": "Ethiopia", + "role_text": "to" + } + ], + "time_text": "2022", + "sources": [], + "operations": [ + { + "verb": "rank", + "phrase": "top 5 donors", + "over": "origin" + } + ] + }, + "operations": [ + { + "verb": "rank", + "phrase": "top 5 donors", + "over": "origin" + } + ], + "departures": [ + { + "code": "operation_not_applied", + "asked": "top 5 donors", + "text": "You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings." + } + ], + "assumptions": [ + { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": [ + "DAC2aAidType206" + ] + } + ], + "status": "definite", + "spec": { + "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "definition": { + "schema_version": 1, + "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/ETH" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2022, + "end_year": 2022 + }, + "open_roles": [ + "origin" + ] + } + }, + "resolved": { + "shape": { + "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", + "label": "gross disbursements (official development assistance)", + "population_type": { + "ref": "FinancialFlow", + "label": "financial flow" + }, + "measured_property": { + "ref": "amount", + "label": "amount" + }, + "stat_type": { + "ref": "measuredValue", + "label": "measuredValue" + }, + "measurement_qualifier": { + "ref": "Nominal", + "label": "Nominal" + }, + "measurement_denominator_unresolved": false, + "slot_keys": [ + { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + { + "axis": "where", + "label": "place" + }, + { + "axis": "when", + "label": "time window" + }, + { + "axis": "source", + "label": "data source" + } + ], + "member_count": 1, + "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "refine_supported": true, + "data_commons": [ + { + "id": "dfo", + "label": "Development Finance Observatory" + } + ] + }, + "slots": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "DAC2aAidType206", + "label": "official development assistance" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Disbursement", + "label": "disbursement" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "country/ETH", + "label": "Ethiopia" + }, + "value_kind": "entity" + } + }, + "summable": false + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding": { + "kind": "value", + "value": { + "value_kind": "time_window", + "time_window": { + "start_year": 2022, + "end_year": 2022 + } + } + }, + "summable": false + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "dacTypeOfFinance", + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 1, + "member_count_exact": true, + "served_count": 1, + "data_date_range": { + "start": "2022", + "end": "2022" + } + }, + "entities": [ + { + "ref": "country/ETH", + "label": "Ethiopia", + "entity_type": "Country", + "role": "destination" + } + ], + "coverage": { + "kind": "exact", + "has_data": true, + "observation_count": 110, + "evidence": "facet_metadata", + "dimensions": [ + { + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 1 + }, + { + "label": "variables", + "count": 1 + } + ], + "window": { + "start_year": 2022, + "end_year": 2022 + } + }, + "headline": { + "year": 2022, + "year_named": true, + "named_window": { + "start_year": 2022, + "end_year": 2022 + }, + "observations": 110, + "series": 110, + "role_counts": { + "financingProvider": 110, + "financingRecipient": 1 + }, + "recent_years": [ + { + "year": 2022, + "observations": 110, + "series": 110, + "role_counts": { + "financingProvider": 110, + "financingRecipient": 1 + } + }, + { + "year": 2021, + "observations": 102, + "series": 102, + "role_counts": { + "financingProvider": 102, + "financingRecipient": 1 + } + }, + { + "year": 2020, + "observations": 90, + "series": 90, + "role_counts": { + "financingProvider": 90, + "financingRecipient": 1 + } + } + ] + }, + "download": { + "rows": 110, + "rows_exact": true, + "series": 110, + "window": { + "start_year": 2022, + "end_year": 2022 + }, + "licence": { + "label": "OECD Terms and Conditions" + } + }, + "coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "facets": { + "provenance": { + "basis": "fallback", + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A", + "account": "provider" + }, + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + } + }, + "slot_options": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "options": [ + { + "value": { + "ref": { + "ref": "DAC2aAidType218", + "label": "ODA loans and other long-term capital" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 2, + "served_rows": 23, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType201", + "label": "ODA grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "DAC2aAidType206", + "member_count": 1, + "served_rows": 109, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType207", + "label": "free-standing technical co-operation" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 42, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType213", + "label": "developmental food aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 17, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "DAC2aAidType216", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 1, + "served_rows": 52, + "served_rows_exact": true + } + ], + "truncated": false, + "source": "observed" + } + ], + "entity_options": [ + { + "role": "origin", + "options": [], + "truncated": true, + "source": "observed" + } + ], + "facet_options": [ + { + "axis": "provenance", + "options": [ + { + "value": { + "ref": { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A" + }, + "value_kind": "source" + } + } + ], + "truncated": false, + "source": "observed" + }, + { + "axis": "unit", + "options": [ + { + "value": { + "ref": { + "ref": "CurrencyUSD", + "label": "US Dollar" + }, + "value_kind": "enum_value" + } + } + ], + "truncated": false, + "source": "observed" + } + ], + "rendered_sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ] + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Ethiopia", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/ETH" + ], + "states": [ + "where:" + ] + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "137 providers", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ] + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + } + ], + "trace": { + "resolved_entities": [ + { + "ref": "country/ETH", + "label": "Ethiopia" + } + ], + "resolved_sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2a", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": "/api/graph/documentation/provenance/OECDDAC2A" + } + ], + "slot_filters": [ + { + "key": { + "axis": "how", + "property": { + "ref": "dac2aAidType", + "label": "DAC 2a aid type" + }, + "label": "aid type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "DAC2aAidType206", + "label": "official development assistance" + } + ], + "provenance": "declared_default" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" + }, + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" + } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "dacTypeOfFinance", + "label": "DAC type of finance" + }, + "label": "DAC type of finance" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "where", + "label": "place" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "country/ETH", + "label": "Ethiopia" + } + ], + "provenance": "binder" + }, + { + "key": { + "axis": "when", + "label": "time window" + }, + "binding_kind": "value", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [], + "requested_window": { + "start_year": 2022, + "end_year": 2022 + }, + "capability_version": "cap_347a470e04c97eec", + "default_reading": { + "applied": true, + "removed_stat_vars": [] + } + }, + "confidence": "high", + "available_at_place": true, + "alternative_measures": [ + { + "definition": { + "schema_version": 1, + "spec_id": "spec_3c568219e4c10cc4b9bdc35725c83293", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Net" + } + } + ], + "entities": { + "destination": [ + "country/ETH" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2022, + "end_year": 2022 + } + } + }, + "label": "net disbursements", + "axis": "what", + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Net", + "label": "net" + } + } + ], + "served_rows": 111, + "served_rows_exact": true + } + ], + "measure_label": "gross disbursements", + "measure_label_axes": [ + "populationType", + "measuredProperty", + "measurementQualifier", + "financialFlowType", + "nettingBasis" + ], + "measure_axis_values": [ + { + "axis": "populationType", + "value": { + "ref": "FinancialFlow", + "label": "financial flow" + } + }, + { + "axis": "measuredProperty", + "value": { + "ref": "amount", + "label": "amount" + } + }, + { + "axis": "measurementQualifier", + "value": { + "ref": "Nominal", + "label": "nominal" + } + }, + { + "axis": "financialFlowType", + "value": { + "ref": "Disbursement", + "label": "disbursement" + } + }, + { + "axis": "nettingBasis", + "value": { + "ref": "Gross", + "label": "gross" + } + } + ], + "role_axis_facts": [ + { + "role": "origin", + "member_count": 137, + "members_available": true + } + ], + "unit_conversion": { + "currencies": [ + { + "code": "AED", + "noun": "UAE dirhams", + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023, + "current_years": null + }, + { + "code": "AFN", + "noun": "Afghan afghanis", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2002, + "base_year_max": 2025 + }, + { + "code": "ALL", + "noun": "Albanian leks", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AMD", + "noun": "Armenian drams", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "AOA", + "noun": "Angolan kwanzas", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "ARS", + "noun": "Argentine pesos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "AUD", + "noun": "Australian dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "AWG", + "noun": "Aruban florins", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1995, + "base_year_max": 2025 + }, + { + "code": "AZN", + "noun": "Azerbaijani manats", + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023, + "current_years": null + }, + { + "code": "BAM", + "noun": "Bosnia-Herzegovina convertible marks", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1996, + "base_year_max": 2025 + }, + { + "code": "BBD", + "noun": "Barbadian dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BDT", + "noun": "Bangladeshi taka", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BHD", + "noun": "Bahraini dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BIF", + "noun": "Burundian francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BND", + "noun": "Brunei dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1985, + "base_year_max": 2025 + }, + { + "code": "BOB", + "noun": "Bolivian bolivianos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BRL", + "noun": "Brazilian reais", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "BSD", + "noun": "Bahamian dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BTN", + "noun": "Bhutanese ngultrums", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BWP", + "noun": "Botswana pula", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "BYN", + "noun": "Belarusian rubles", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "BZD", + "noun": "Belize dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CAD", + "noun": "Canadian dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CDF", + "noun": "Congolese francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "CHF", + "noun": "Swiss francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "CLP", + "noun": "Chilean pesos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CNY", + "noun": "Chinese yuan", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "COP", + "noun": "Colombian pesos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CRC", + "noun": "Costa Rican colones", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CVE", + "noun": "Cape Verdean escudos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "CZK", + "noun": "Czech korunas", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "DJF", + "noun": "Djiboutian francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "DKK", + "noun": "Danish kroner", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "DOP", + "noun": "Dominican pesos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "DZD", + "noun": "Algerian dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EGP", + "noun": "Egyptian pounds", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ERN", + "noun": "Eritrean nakfas", + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2019, + "current_years": null + }, + { + "code": "ETB", + "noun": "Ethiopian birr", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "EUR", + "noun": "euros", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1973, + "base_year_max": 2025 + }, + { + "code": "FJD", + "noun": "Fijian dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GBP", + "noun": "British pounds", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "GEL", + "noun": "Georgian lari", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1994, + "base_year_max": 2025 + }, + { + "code": "GHS", + "noun": "Ghanaian cedis", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GMD", + "noun": "Gambian dalasis", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GNF", + "noun": "Guinean francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GTQ", + "noun": "Guatemalan quetzales", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "GYD", + "noun": "Guyanese dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HKD", + "noun": "Hong Kong dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HNL", + "noun": "Honduran lempiras", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HTG", + "noun": "Haitian gourdes", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "HUF", + "noun": "Hungarian forints", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2003, + "base_year_max": 2025 + }, + { + "code": "IDR", + "noun": "Indonesian rupiahs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ILS", + "noun": "Israeli new shekels", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "INR", + "noun": "Indian rupees", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "IQD", + "noun": "Iraqi dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2000, + "base_year_max": 2025 + }, + { + "code": "IRR", + "noun": "Iranian rials", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ISK", + "noun": "Icelandic krónur", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "JMD", + "noun": "Jamaican dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JOD", + "noun": "Jordanian dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "JPY", + "noun": "Japanese yen", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "KES", + "noun": "Kenyan shillings", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KGS", + "noun": "Kyrgyz soms", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "KHR", + "noun": "Cambodian riels", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1986, + "base_year_max": 2025 + }, + { + "code": "KMF", + "noun": "Comorian francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "KRW", + "noun": "South Korean won", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "KWD", + "noun": "Kuwaiti dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1995, + "base_year_max": 2024 + }, + { + "code": "KZT", + "noun": "Kazakh tenge", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2013, + "base_year_max": 2024 + }, + { + "code": "LAK", + "noun": "Lao kip", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LBP", + "noun": "Lebanese pounds", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LKR", + "noun": "Sri Lankan rupees", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2024 + }, + { + "code": "LSL", + "noun": "Lesotho maloti", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "LYD", + "noun": "Libyan dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MAD", + "noun": "Moroccan dirhams", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MDL", + "noun": "Moldovan lei", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MGA", + "noun": "Malagasy ariary", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MKD", + "noun": "Macedonian denars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "MMK", + "noun": "Myanmar kyats", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "MNT", + "noun": "Mongolian tugriks", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MOP", + "noun": "Macanese patacas", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2001, + "base_year_max": 2025 + }, + { + "code": "MRU", + "noun": "Mauritanian ouguiyas", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "MUR", + "noun": "Mauritian rupees", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MVR", + "noun": "Maldivian rufiyaa", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MWK", + "noun": "Malawian kwachas", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MXN", + "noun": "Mexican pesos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MYR", + "noun": "Malaysian ringgits", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "MZN", + "noun": "Mozambican meticais", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NAD", + "noun": "Namibian dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1989, + "base_year_max": 2025 + }, + { + "code": "NGN", + "noun": "Nigerian naira", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "NIO", + "noun": "Nicaraguan córdobas", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1987, + "base_year_max": 2025 + }, + { + "code": "NOK", + "noun": "Norwegian kroner", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "NPR", + "noun": "Nepalese rupees", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "NZD", + "noun": "New Zealand dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1961, + "base_year_max": 2025 + }, + { + "code": "OMR", + "noun": "Omani rials", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PEN", + "noun": "Peruvian soles", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PGK", + "noun": "Papua New Guinean kina", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PHP", + "noun": "Philippine pesos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PKR", + "noun": "Pakistani rupees", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "PLN", + "noun": "Polish zlotys", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1998, + "base_year_max": 2025 + }, + { + "code": "PYG", + "noun": "Paraguayan guaranís", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "QAR", + "noun": "Qatari riyals", + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2023, + "current_years": null + }, + { + "code": "RON", + "noun": "Romanian lei", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2013, + "base_year_max": 2025 + }, + { + "code": "RSD", + "noun": "Serbian dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1997, + "base_year_max": 2025 + }, + { + "code": "RUB", + "noun": "Russian rubles", + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2010, + "base_year_max": 2020, + "current_years": null + }, + { + "code": "RWF", + "noun": "Rwandan francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SAR", + "noun": "Saudi riyals", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2000, + "base_year_max": 2023 + }, + { + "code": "SBD", + "noun": "Solomon Islands dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SCR", + "noun": "Seychellois rupees", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SDG", + "noun": "Sudanese pounds", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SEK", + "noun": "Swedish kronor", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "SGD", + "noun": "Singapore dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SLE", + "noun": "Sierra Leonean leones", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SRD", + "noun": "Surinamese dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SSP", + "noun": "South Sudanese pounds", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2011, + "base_year_max": 2025 + }, + { + "code": "STN", + "noun": "São Tomé and Príncipe dobras", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "SYP", + "noun": "Syrian pounds", + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2010, + "current_years": null + }, + { + "code": "SZL", + "noun": "Swazi emalangeni", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "THB", + "noun": "Thai baht", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2018, + "base_year_max": 2024 + }, + { + "code": "TJS", + "noun": "Tajikistani somonis", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TMT", + "noun": "Turkmenistani manat", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "TND", + "noun": "Tunisian dinars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TOP", + "noun": "Tongan paʻanga", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TRY", + "noun": "Turkish lira", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1990, + "base_year_max": 2025 + }, + { + "code": "TTD", + "noun": "Trinidad and Tobago dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "TWD", + "noun": "New Taiwan dollars", + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2023, + "base_year_max": 2025, + "current_years": null + }, + { + "code": "TZS", + "noun": "Tanzanian shillings", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UAH", + "noun": "Ukrainian hryvnias", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1991, + "base_year_max": 2025 + }, + { + "code": "UGX", + "noun": "Ugandan shillings", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "USD", + "noun": "US dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1960, + "base_year_max": 2025 + }, + { + "code": "UYU", + "noun": "Uruguayan pesos", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "UZS", + "noun": "Uzbekistani soms", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1992, + "base_year_max": 2025 + }, + { + "code": "VES", + "noun": "Venezuelan bolívares", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2017, + "base_year_max": 2025 + }, + { + "code": "VND", + "noun": "Vietnamese dong", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "VUV", + "noun": "Vanuatu vatu", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "WST", + "noun": "Samoan tala", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XAF", + "noun": "Central African CFA francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XCD", + "noun": "East Caribbean dollars", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "XOF", + "noun": "West African CFA francs", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "YER", + "noun": "Yemeni rials", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 2014, + "base_year_max": 2025 + }, + { + "code": "ZAR", + "noun": "South African rand", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + }, + { + "code": "ZMW", + "noun": "Zambian kwachas", + "current_years": { + "start_year": 2022, + "end_year": 2022 + }, + "constant_years": { + "start_year": 2022, + "end_year": 2022 + }, + "base_year_min": 1980, + "base_year_max": 2025 + } + ], + "default_base_year": 2024, + "role_currencies": { + "destination": "ETB" + } + } + } + } + } + ], + "rendered_sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings. Assumed: official development assistance.", + "sentence_plan": [ + { + "kind": "slot", + "text": "Gross disbursements", + "axis": "what", + "segment": "heading", + "entity_refs": [], + "states": [ + "how:financialFlowType", + "how:nettingBasis", + "axis:populationType", + "axis:measuredProperty" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " to ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "Ethiopia", + "axis": "where", + "segment": "heading", + "role": "destination", + "binding_ref": "where:", + "entity_refs": [ + "country/ETH" + ], + "states": [ + "where:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " from ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "137 providers", + "segment": "heading", + "role": "origin", + "binding_ref": "origin:", + "entity_refs": [], + "states": [ + "origin:" + ], + "part_index": 0 + }, + { + "kind": "text", + "text": " for ", + "segment": "heading", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "official development assistance", + "axis": "how", + "segment": "heading", + "property_dcid": "dac2aAidType", + "binding_ref": "how:dac2aAidType", + "entity_refs": [], + "states": [ + "how:dac2aAidType" + ], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "dacTypeOfFinance", + "binding_ref": "how:dacTypeOfFinance", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "financialFlowType", + "binding_ref": "how:financialFlowType", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "slot", + "text": "", + "axis": "how", + "segment": "heading", + "property_dcid": "nettingBasis", + "binding_ref": "how:nettingBasis", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "in 2022", + "axis": "when", + "segment": "heading", + "binding_ref": "when:", + "entity_refs": [], + "states": [ + "when:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "heading", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "Current US dollars", + "axis": "unit", + "segment": "byline", + "binding_ref": "unit:", + "entity_refs": [], + "states": [ + "unit:", + "axis:measurementQualifier" + ] + }, + { + "kind": "text", + "text": " · ", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "slot", + "text": "OECD DAC2a", + "axis": "source", + "segment": "byline", + "entity_refs": [], + "states": [ + "source:" + ] + }, + { + "kind": "text", + "text": ".", + "segment": "byline", + "entity_refs": [], + "states": [] + }, + { + "kind": "text", + "text": " ", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings.", + "segment": "departure", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": " ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "Assumed: ", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": "official development assistance", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + }, + { + "kind": "text", + "text": ".", + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": 0 + } + ], + "status": "definite" + } + } + }, + { + "request": { + "method": "POST", + "path": "/datasets", + "json": { + "schema_version": 1, + "input": { + "kind": "spec_id", + "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "definition": { + "schema_version": 1, + "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "identity": { + "identity_version": "spec1", + "shape": { + "kind": "statvar_schema", + "population_type": "FinancialFlow", + "measured_property": "amount", + "stat_type": "measuredValue", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "property": "dac2aAidType", + "binding": { + "state": "value", + "ref": "DAC2aAidType206" + } + }, + { + "property": "dacTypeOfFinance", + "binding": { + "state": "unbound" + } + }, + { + "property": "financialFlowType", + "binding": { + "state": "value", + "ref": "Disbursement" + } + }, + { + "property": "nettingBasis", + "binding": { + "state": "value", + "ref": "Gross" + } + } + ], + "entities": { + "destination": [ + "country/ETH" + ] + }, + "requested_window": { + "kind": "range", + "start_year": 2022, + "end_year": 2022 + }, + "open_roles": [ + "origin" + ] + } + } + }, + "options": { + "format": "parquet", + "bundle": false + } + } + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/json", + "x-dfo-trace-id": "f0557d404d0d4f34aa2ad0fd2784dfac" + }, + "json": { + "schema_version": 1, + "definition": { + "schema_version": 1, + "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "identity": { + "shape": { + "kind": "statvar_schema", + "stat_type": "measuredValue", + "population_type": "FinancialFlow", + "measured_property": "amount", + "measurement_qualifier": "Nominal" + }, + "slots": [ + { + "binding": { + "ref": "DAC2aAidType206", + "state": "value" + }, + "property": "dac2aAidType" + }, + { + "binding": { + "state": "unbound" + }, + "property": "dacTypeOfFinance" + }, + { + "binding": { + "ref": "Disbursement", + "state": "value" + }, + "property": "financialFlowType" + }, + { + "binding": { + "ref": "Gross", + "state": "value" + }, + "property": "nettingBasis" + } + ], + "entities": { + "destination": [ + "country/ETH" + ] + }, + "open_roles": [ + "origin" + ], + "identity_version": "spec1", + "requested_window": { + "kind": "range", + "end_year": 2022, + "start_year": 2022 + } + } + }, + "content_version": "cv_534dd4c2bf9bdafc837d51a3ba4bcf3e", + "prepared_at": "2026-10-21T13:07:05Z", + "coverage": { + "rows": 110, + "dimensions": [ + { + "label": "financingProvider", + "count": 110, + "axis": "origin", + "noun": { + "singular": "provider", + "plural": "providers" + } + }, + { + "label": "financingRecipient", + "count": 1, + "axis": "destination", + "noun": { + "singular": "recipient", + "plural": "recipients" + } + }, + { + "label": "years", + "count": 1 + } + ], + "window": { + "kind": "range", + "start_year": 2022, + "end_year": 2022, + "origin": "query" + } + }, + "citation": { + "text": "OECD DAC2A (2026), via the Development Finance Observatory", + "sources": [ + { + "ref": "provenance/OECDDAC2A", + "label": "OECD DAC2A", + "license": "OECD Terms and Conditions", + "license_type": "OECDTermsAndConditions", + "license_url": "https://www.oecd.org/en/about/terms-conditions.html", + "url": "https://data-explorer.oecd.org/vis?tm=dac2a&pg=0&snb=1&df[ds]=dsDisseminateFinalDMZ&df[id]=DSD_DAC2%40DF_DAC2A&df[ag]=OECD.DCD.FSD&df[vs]=1.6&dq=.DPGC.206.USD.Q&lom=LASTNPERIODS&lo=5&to[TIME_PERIOD]=false&isAvailabilityDisabled=false&page=0", + "source": { + "ref": "dc/s/OrganisationForEconomicCo-operationAndDevelopmentOecd", + "label": "Organisation for Economic Co-operation and Development (OECD)" + }, + "data_commons": { + "id": "dfo", + "label": "Development Finance Observatory" + }, + "documentation": { + "publisher": "Organisation for Economic Co-operation and Development (OECD)", + "description": "DAC2A is the OECD Development Assistance Committee's table of ODA disbursements by donor and recipient country or region. It covers bilateral donors and multilateral agencies reporting their own outflows, and includes the OECD's estimate of each donor's core multilateral contributions attributed to recipients.", + "source_data_url": "https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip", + "attribution": "OECD (2026), OECD DAC2A, OECD Data Explorer, https://webfs-dcd.oecd.org/files/dotStat/DSD_DAC2/Table2a_Data.zip (accessed on 2026-10-12)", + "update_cadence": "Quarterly", + "last_update": "2026-10-15", + "years_covered": "1960-2024", + "granularity": "Annual, by provider and recipient", + "currencies": [ + "USD" + ], + "transformation_log": [ + { + "transformation": "Download the source data", + "description": "The OECD publishes DAC2A in April, June, September and December. The complete table is downloaded from the OECD each time it is republished, and replaces the previous copy, so the data reflects the OECD's latest release." + }, + { + "transformation": "Exclude the partial preliminary year", + "description": "Before each full release, the OECD publishes preliminary data for the year that release covers, as reporters submit it. Until then, that year is partial, so the pipeline excludes it. Support for partial years is in development. Partial years will be marked incomplete, so they don't lead to incorrect or confusing analyses." + }, + { + "transformation": "Standardise providers and recipients", + "description": "Provider and recipient codes are standardised to Data Commons IDs used across the platform, so data can be compared across datasets. The totals DAC2A reports for groups of providers, such as all DAC countries, and for groups of recipients, such as regions and income groups, are included as providers and recipients of their own. Where two provider codes name the same organisation and report the same figures, the figures are counted once. Where two recipient codes name the same organisation, such as IDA and IDA's Multilateral Debt Relief Initiative, their flows are added." + }, + { + "transformation": "Select figures", + "description": "Only figures in current US dollars are included, not constant US dollars. Only flows to recipients on Part I of the DAC List are included: the developing countries, and the multilateral organisations DAC2A reports as recipients, such as development banks and UN agencies. Flows to Part II recipients, the countries in transition, are excluded." + }, + { + "transformation": "Convert to whole units", + "description": "DAC2A reports amounts in millions, which are converted to whole units. ODA per person and ODA as a share of GNI are kept as reported." + }, + { + "transformation": "Select dimensions", + "description": "Each figure is reported by year, provider, recipient and type of aid, such as grants, repayments, interest received, or debt forgiven or rescheduled. DAC2A is a table of disbursements, so every figure, repayments and interest included, is recorded as a disbursement. Figures are marked as gross or net, except where DAC2A does not say which, and as grants or non-grants where the type of aid is wholly one or the other. Imputed multilateral ODA, the OECD's estimate of each provider's share of multilateral organisations' ODA, is marked as modelled. ODA as a share of GNI records the recipient's GNI as its denominator, and ODA per person records the recipient's population." + } + ], + "version_history": [ + { + "date": "2026-10-15", + "title": "Partial preliminary year excluded", + "changes": [ + { + "kind": "changed", + "note": "The partial preliminary year published ahead of the next full release is excluded." + } + ] + }, + { + "date": "2026-10-14", + "title": "First release", + "changes": [ + { + "kind": "added", + "note": "ODA disbursements by donor and recipient country or region, including the OECD's imputed multilateral contributions, and ODA per person and as a share of recipient GNI." + } + ] + } + ] + } + } + ] + }, + "trace": { + "applied_window": { + "kind": "range", + "start_year": 2022, + "end_year": 2022, + "origin": "query" + }, + "graph_revision": null, + "code_index_stamp": { + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-20T19:50:14Z", + "graph_endpoint": "graph_release" + }, + "origin_catalogue_build_id": "20261021T070020Z-7262111e", + "source_revisions": [ + { + "source": "provenance/OECDDAC2A", + "revision": "2026-10-15" + } + ], + "resolved_stat_vars": [ + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 110 + } + ], + "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_count": 1, + "facets": [ + { + "axis": "provenance", + "ref": "provenance/OECDDAC2A", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "measurementMethod", + "ref": null, + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "absent_on_selected_facet", + "dispatch_facet_id": "1962969911839422253" + }, + { + "axis": "unit", + "ref": "CurrencyUSD", + "basis": "deployment_fallback", + "default_policy": "dfo/facet-policy/most-observations", + "default_policy_version": "1", + "selection_reason": "sole_candidate", + "dispatch_facet_id": "1962969911839422253" + } + ], + "normalisations": [], + "frame_grammar_version": "1.1.0", + "materialiser_build": "635943e03a297f686ca5af32f6d027181d1971d4", + "capability_version": "dset_88fecfec3c5b89d1", + "served_from": "materialise", + "confirmed_at": "2026-10-21T13:07:05.722653+00:00" + }, + "warnings": [], + "diagnostics": [ + { + "code": "processing_level_undeclared", + "severity": "info", + "message": "A source StatVar lacks a processing-level declaration; the citation credits the source and omits the processing qualifier." + } + ], + "artifacts": [ + { + "artifact_digest": "sha256:7ca72626eed07dafebc7eaa78713c1c5a36ef05a19d8da96b723dec80d50317f", + "rendering": { + "bundle": false, + "format": "parquet", + "layout": 3 + }, + "bytes": 10828, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:07:05.693889+00:00", + "tier": "working", + "url": "/api/datasets/spec_7778beed72f8433bb7fde4293acfd175/cv_534dd4c2bf9bdafc837d51a3ba4bcf3e/files/sha256:7ca72626eed07dafebc7eaa78713c1c5a36ef05a19d8da96b723dec80d50317f" + }, + { + "artifact_digest": "sha256:5b508be6b46ce8e01315f9c89a1837e17ed7b49d7d2554011cfdba9f32203084", + "rendering": { + "statistics": "series" + }, + "bytes": 10167, + "media_type": "application/vnd.apache.parquet", + "created_at": "2026-10-21T13:07:05.693889+00:00", + "tier": "working", + "url": "/api/datasets/spec_7778beed72f8433bb7fde4293acfd175/cv_534dd4c2bf9bdafc837d51a3ba4bcf3e/files/sha256:5b508be6b46ce8e01315f9c89a1837e17ed7b49d7d2554011cfdba9f32203084" + } + ], + "series_count": 110, + "output_options": { + "capability_version": "dset_88fecfec3c5b89d1", + "columns": [ + { + "name": "stat_var", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "financingProvider", + "kind": "role", + "droppable": false, + "distinct": 110 + }, + { + "name": "financingRecipient", + "kind": "role", + "droppable": false, + "distinct": 1 + }, + { + "name": "time_period", + "kind": "grain", + "droppable": false, + "distinct": 1 + }, + { + "name": "value", + "kind": "value", + "droppable": true + }, + { + "name": "unit", + "kind": "unit", + "droppable": false, + "distinct": 1 + }, + { + "name": "measurementMethod", + "kind": "facet", + "droppable": true, + "distinct": 1 + }, + { + "name": "provenance", + "kind": "facet", + "droppable": false, + "distinct": 1 + }, + { + "name": "status", + "kind": "status", + "droppable": true + } + ], + "formats": [ + { + "name": "csv", + "state": "available" + }, + { + "name": "xlsx", + "state": "available" + }, + { + "name": "parquet", + "state": "available" + } + ], + "bundle": { + "state": "available" + }, + "enrichments": [ + { + "column": "financingProvider", + "field": "iso3", + "token": "financingProvider_iso3", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 110, + "covered": 40 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "BloombergPhilanthropies", + "label": "Bloomberg Philanthropies" + }, + { + "ref": "CentralEmergencyResponseFund", + "label": "Central Emergency Response Fund" + }, + { + "ref": "ChildrensInvestmentFundFoundation", + "label": "Children's Investment Fund Foundation" + }, + { + "ref": "ClimateInvestmentFunds", + "label": "Climate Investment Funds" + }, + { + "ref": "ConradNHiltonFoundation", + "label": "Conrad N. Hilton Foundation" + }, + { + "ref": "DACCountriesTotal", + "label": "DAC countries" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "iso2", + "token": "financingProvider_iso2", + "state": "partial", + "reason": "enrichment_unavailable", + "coverage": { + "entities": 110, + "covered": 40 + }, + "missing": [ + { + "ref": "AdaptationFund", + "label": "Adaptation Fund" + }, + { + "ref": "AfricanDevelopmentBankGroup", + "label": "African Development Bank Group" + }, + { + "ref": "AfricanDevelopmentFund", + "label": "African Development Fund" + }, + { + "ref": "ArcusFoundation", + "label": "Arcus Foundation" + }, + { + "ref": "BloombergPhilanthropies", + "label": "Bloomberg Philanthropies" + }, + { + "ref": "CentralEmergencyResponseFund", + "label": "Central Emergency Response Fund" + }, + { + "ref": "ChildrensInvestmentFundFoundation", + "label": "Children's Investment Fund Foundation" + }, + { + "ref": "ClimateInvestmentFunds", + "label": "Climate Investment Funds" + }, + { + "ref": "ConradNHiltonFoundation", + "label": "Conrad N. Hilton Foundation" + }, + { + "ref": "DACCountriesTotal", + "label": "DAC countries" + } + ], + "truncated": true + }, + { + "column": "financingProvider", + "field": "label", + "token": "financingProvider_label", + "state": "available", + "coverage": { + "entities": 110, + "covered": 110 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "type", + "token": "financingProvider_type", + "state": "available", + "coverage": { + "entities": 110, + "covered": 110 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingProvider", + "field": "party_kind", + "token": "financingProvider_party_kind", + "state": "available", + "coverage": { + "entities": 110, + "covered": 110 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso3", + "token": "financingRecipient_iso3", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "iso2", + "token": "financingRecipient_iso2", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "label", + "token": "financingRecipient_label", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "type", + "token": "financingRecipient_type", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + }, + { + "column": "financingRecipient", + "field": "party_kind", + "token": "financingRecipient_party_kind", + "state": "available", + "coverage": { + "entities": 1, + "covered": 1 + }, + "missing": [], + "truncated": false + } + ], + "long_layout_defaults": [ + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient_label", + "financingRecipient_party_kind" + ], + "long_layout_totals": [ + "financingProvider" + ], + "pivots": [], + "groupby": { + "state": "available", + "axes": [ + { + "name": "crsCooperationModality" + }, + { + "name": "crsPurpose" + }, + { + "name": "crsTypeOfFinance" + }, + { + "name": "crsTypeOfFlow" + } + ] + } + }, + "series_coverage_stamp": "5a4dd8009d09f5328e1439a71fc02ff8e2385aaed6310928fc34efb3a592fac4", + "retention": { + "pinned": false, + "held_until": "2026-11-20T13:07:05.693915Z" + } + } + } + }, + { + "request": { + "method": "GET", + "origin_path": "/api/datasets/spec_7778beed72f8433bb7fde4293acfd175/cv_534dd4c2bf9bdafc837d51a3ba4bcf3e/files/sha256:7ca72626eed07dafebc7eaa78713c1c5a36ef05a19d8da96b723dec80d50317f" + }, + "response": { + "status": 302, + "headers": { + "location": "https://storage.googleapis.com/e2e-working/sha256%3A7ca72626eed07dafebc7eaa78713c1c5a36ef05a19d8da96b723dec80d50317f?X-Goog-Signature=redacted", + "x-dfo-trace-id": "5b1ffba527ed4c2b9ae59df39ceb3482" + } + } + }, + { + "request": { + "method": "GET", + "url": "https://storage.googleapis.com/e2e-working/sha256%3A7ca72626eed07dafebc7eaa78713c1c5a36ef05a19d8da96b723dec80d50317f?X-Goog-Signature=redacted" + }, + "response": { + "status": 200, + "headers": { + "content-type": "application/vnd.apache.parquet", + "x-dfo-trace-id": "b1b959d03f9943679a50cfe0f8e1ad5d" + }, + "body_file": "search-warning-top5.parquet" + } + } + ], + "expect": [ + { + "answer": { + "kind": "resolution", + "status": "definite", + "sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. You asked for a ranking. This shows the amounts behind it, because Search does not compute rankings. Assumed: official development assistance.", + "complete": true, + "specs": [ + "spec_7778beed72f8433bb7fde4293acfd175" + ], + "gaps": [] + } + }, + { + "error": { + "class": "SearchWarning", + "code": null, + "trace_id": "2b349555f60d4b9aa5c17d3f59541531" + } + }, + { + "dataset": { + "rows": 110, + "columns": [ + "stat_var", + "financingProvider", + "financingProvider_label", + "financingProvider_party_kind", + "financingRecipient", + "financingRecipient_label", + "financingRecipient_party_kind", + "dac2aAidType", + "dac2aAidType_label", + "time_period", + "value", + "unit", + "unit_label", + "currency", + "price_basis", + "base_year", + "measurementMethod", + "measurementMethod_label", + "provenance", + "provenance_label" + ], + "complete": true, + "members": [ + { + "parts": [ + "aid" + ], + "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "content_version": "cv_534dd4c2bf9bdafc837d51a3ba4bcf3e", + "sentence": "Gross disbursements to Ethiopia from 137 providers for official development assistance in 2022. Current US dollars · OECD DAC2a." + } + ], + "missing": [], + "search_warning": true + } + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.parquet b/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.parquet new file mode 100644 index 0000000..c670090 Binary files /dev/null and b/python/client-contract/src/dfo_client_contract/scenarios/search-warning-top5.parquet differ diff --git a/python/client-contract/src/dfo_client_contract/served/SOURCE.json b/python/client-contract/src/dfo_client_contract/served/SOURCE.json new file mode 100644 index 0000000..d9f2516 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/served/SOURCE.json @@ -0,0 +1,6 @@ +{ + "format_version": 1, + "repository": "DevelopmentFinanceObservatory/apis", + "commit": "635943e03a297f686ca5af32f6d027181d1971d4", + "captured_from": "dfo_apis.app.create_app() in process" +} diff --git a/python/client-contract/src/dfo_client_contract/served/openapi.json b/python/client-contract/src/dfo_client_contract/served/openapi.json new file mode 100644 index 0000000..ccdc35a --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/served/openapi.json @@ -0,0 +1,20591 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "DFO APIs", + "version": "1.0" + }, + "paths": { + "/api/search/resolve": { + "post": { + "tags": [ + "Search" + ], + "summary": "Resolve", + "operationId": "search_resolve", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/search__models__request__ResolveRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A buffered ResolveResponse JSON document or, with Accept: text/event-stream, progressive Server-Sent Events. Successful streams emit a complete response event and end with done; pipeline failures end with error and emit neither response nor done.", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/Resolution" + }, + { + "$ref": "#/components/schemas/CatalogueAnswer" + }, + { + "$ref": "#/components/schemas/DeclinedAnswer" + } + ], + "title": "Response Search Resolve", + "discriminator": { + "propertyName": "kind", + "mapping": { + "resolution": "#/components/schemas/Resolution", + "catalogue": "#/components/schemas/CatalogueAnswer", + "declined": "#/components/schemas/DeclinedAnswer" + } + } + } + }, + "text/event-stream": { + "schema": { + "type": "string", + "format": "event-stream", + "description": "Progressive Server-Sent Events frames. On successful streams, the response event contains the complete ResolveResponse body." + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/search/options": { + "post": { + "tags": [ + "Search" + ], + "summary": "List Options", + "description": "The options door: on-demand candidate enumeration for one resolved\nentity role (origin, destination, or observationAbout) of a posted\nidentity, queried independently of the /resolve pipeline and fetched\nlazily when a user opens an editor.\n\nComposes engine.options.resolve.resolve_options_target (derive the\nposted identity's own StatVar population, typed anchors and\nrole-target validity, server-side, with no resubmit or materialise\npipeline) with engine.options.surface.compute_options (compute the\nper-role option surface), then assembles the envelope here --\nsee those two modules' own docstrings for the full design, including\nthe option_target_invalid (422) role check that runs inside\nresolution. Every EngineInputError either half raises propagates\nuncaught to classify_search_exception above, the same RFC 9457\nproblem body every other door's refusal returns -- no bespoke\nhandling here.\n\nresolve_options_target always runs, hit or miss on the response\ncache below: it is what runs validate_edited_identity and the role/\nanchor refusals, and none of those may be skipped just because an\nidentical target was already answered once. Only build_options_\nresponse's own compute -- the graph/SDMX work -- is what a cache hit\nskips; see options.options_response_cache's own module docstring for\nthe key and the warning-free-result caching rule.", + "operationId": "search_list_options", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OptionsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OptionsResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/search/healthz": { + "get": { + "tags": [ + "Search" + ], + "summary": "Get Health", + "operationId": "search_get_health", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HealthResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/search/schema": { + "get": { + "tags": [ + "Search" + ], + "summary": "Get Schema", + "operationId": "search_get_schema", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1 + }, + "request": { + "type": "object", + "description": "JSON Schema for request" + }, + "response": { + "type": "object", + "description": "JSON Schema for response" + }, + "capabilities": { + "type": "string" + } + }, + "type": "object", + "required": [ + "schema_version", + "request", + "response", + "capabilities" + ] + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/search/capabilities": { + "get": { + "tags": [ + "Search" + ], + "summary": "Get Capabilities", + "operationId": "search_get_capabilities", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/search__engine__capabilities__Capabilities" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/search/catalogue": { + "get": { + "tags": [ + "Search" + ], + "summary": "Get Catalogue", + "description": "What DFO holds and example sentences to ask of it, from the published\nsearch catalogue. `place` scopes the counts to one country and offers the\nexamples whose StatVar has data there, filled with its name.", + "operationId": "search_get_catalogue", + "parameters": [ + { + "name": "place", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "pattern": "^country/\\S+$" + }, + { + "type": "null" + } + ], + "description": "a country dcid; scopes the counts and examples to that country", + "title": "Place" + }, + "description": "a country dcid; scopes the counts and examples to that country" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CatalogueResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/healthz": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Health", + "operationId": "datasets_get_health", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HealthResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/schema": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Schema", + "operationId": "datasets_get_schema", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1 + }, + "mint_request": { + "type": "object", + "description": "JSON Schema for mint_request" + }, + "register_request": { + "type": "object", + "description": "JSON Schema for register_request" + }, + "register_response": { + "type": "object", + "description": "JSON Schema for register_response" + }, + "manifest": { + "type": "object", + "description": "JSON Schema for manifest" + }, + "definition_options_request": { + "type": "object", + "description": "JSON Schema for definition_options_request" + }, + "options_envelope": { + "type": "object", + "description": "JSON Schema for options_envelope" + }, + "definition_members_request": { + "type": "object", + "description": "JSON Schema for definition_members_request" + }, + "members_envelope": { + "type": "object", + "description": "JSON Schema for members_envelope" + }, + "pin_request": { + "type": "object", + "description": "JSON Schema for pin_request" + }, + "pin_response": { + "type": "object", + "description": "JSON Schema for pin_response" + }, + "operation_resource": { + "type": "object", + "description": "JSON Schema for operation_resource" + }, + "description": { + "type": "object", + "description": "JSON Schema for description" + }, + "description_values_page": { + "type": "object", + "description": "JSON Schema for description_values_page" + }, + "problem_details_extensions": { + "type": "object", + "description": "JSON Schema for problem_details_extensions" + }, + "capabilities": { + "type": "string" + } + }, + "type": "object", + "required": [ + "schema_version", + "mint_request", + "register_request", + "register_response", + "manifest", + "definition_options_request", + "options_envelope", + "definition_members_request", + "members_envelope", + "pin_request", + "pin_response", + "operation_resource", + "description", + "description_values_page", + "problem_details_extensions", + "capabilities" + ] + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/capabilities": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Capabilities", + "operationId": "datasets_get_capabilities", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/datasets_api__capabilities__Capabilities" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/operations/{operation_id}": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Operation", + "operationId": "datasets_get_operation", + "parameters": [ + { + "name": "operation_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Operation Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OperationResource" + } + } + } + }, + "404": { + "description": "Operation not found", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "500": { + "description": "The operation ran and did not complete successfully", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/register": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Register", + "operationId": "datasets_register", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DefinitionResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Mint", + "operationId": "datasets_mint", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MintRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Manifest" + } + } + } + }, + "202": { + "description": "The build runs as a background operation. Poll `Location` until the operation is done; the done poll carries the manifest.", + "headers": { + "Location": { + "description": "The operation's poll URL, `operation.poll` in the body.", + "schema": { + "type": "string" + } + }, + "Retry-After": { + "description": "Whole seconds to wait before the next poll, rounded up from `operation.retry_after_ms`. The value grows as the build runs.", + "schema": { + "type": "integer", + "minimum": 1.0 + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OperationResource" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Definition", + "operationId": "datasets_get_definition", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Manifest" + } + } + } + }, + "202": { + "description": "The build runs as a background operation. Poll `Location` until the operation is done; the done poll carries the manifest.", + "headers": { + "Location": { + "description": "The operation's poll URL, `operation.poll` in the body.", + "schema": { + "type": "string" + } + }, + "Retry-After": { + "description": "Whole seconds to wait before the next poll, rounded up from `operation.retry_after_ms`. The value grows as the build runs.", + "schema": { + "type": "integer", + "minimum": 1 + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OperationResource" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/options": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Definition Options", + "description": "The definition's current version with no rendering, reported as\n`output_options`: what the data honours. A rebuild records the version and advances\nthe head as a GET does. Any query key refuses `request_invalid` with an\n`/options/` pointer, the same `QueryOptionsInvalid` this door's `get_definition`\nraises for a query key outside its own namespace, through the same\n`query_options.pointer_for_key` mapping.", + "operationId": "datasets_get_definition_options", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OptionsEnvelope" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + }, + "post": { + "tags": [ + "Datasets" + ], + "summary": "Post Definition Options", + "description": "The GET route's envelope for a spec id whose canonical `definition` the body\ncarries, registered or not. An unregistered definition is admitted as a mint admits a\nsidecar, registered, and served as the GET route serves a registered one, so the\nmint that follows is a head hit. Query keys refuse as on the GET route.", + "operationId": "datasets_post_definition_options", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DefinitionOptionsRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OptionsEnvelope" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/members": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Post Definition Members", + "description": "The members a mint of the spec serves, resolved without materialising a frame:\neach member's ref, label, declared roles and constraints, their count, and the\nfamily's count and digest. The body may carry the spec's canonical `definition`,\nwhich an unregistered id needs; it is admitted as a mint admits a sidecar and nothing\nis registered. Refusals are the mint's member refusals. Query keys refuse as on the\noptions route.", + "operationId": "datasets_post_definition_members", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/DefinitionMembersRequest" + }, + { + "type": "null" + } + ], + "title": "Body" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MembersEnvelope" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/frames/refresh": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Refresh Frame", + "description": "Whether the named dataset frame is still its rendering's current frame. Answers\n`current`, `moved` with the current frame, or `pending` with the queued rebuild.", + "operationId": "datasets_refresh_frame", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefreshFrameRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/FrameCurrent" + }, + { + "$ref": "#/components/schemas/FrameMoved" + }, + { + "$ref": "#/components/schemas/FramePending" + } + ], + "title": "Response Datasets Refresh Frame", + "discriminator": { + "propertyName": "status", + "mapping": { + "current": "#/components/schemas/FrameCurrent", + "moved": "#/components/schemas/FrameMoved", + "pending": "#/components/schemas/FramePending" + } + } + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/frames/{spec_id}/{content_version}/recipe": { + "put": { + "tags": [ + "Datasets" + ], + "summary": "Put Recipe", + "operationId": "datasets_put_recipe", + "parameters": [ + { + "name": "spec_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^ops_[0-9a-f]{6,64}$", + "title": "Spec Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^ocv_[0-9a-f]{6,64}$", + "title": "Content Version" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Recipe" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecipeWriteResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + }, + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Recipe", + "operationId": "datasets_get_recipe", + "parameters": [ + { + "name": "spec_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^ops_[0-9a-f]{6,64}$", + "title": "Spec Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^ocv_[0-9a-f]{6,64}$", + "title": "Content Version" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Recipe" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/recipes/replays/{replay_key}": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Replay", + "operationId": "datasets_get_replay", + "parameters": [ + { + "name": "replay_key", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^rpk_[0-9a-f]{32}$", + "title": "Replay Key" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReplayedFrameResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/versions": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "List Versions", + "operationId": "datasets_list_versions", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100, + "title": "Limit" + } + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetVersionsPage" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/{content_version}": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Snapshot", + "operationId": "datasets_get_snapshot", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Manifest" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/{content_version}/description": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Description", + "operationId": "datasets_get_description", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + } + ], + "responses": { + "200": { + "description": "the version's description", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "A version's description, in the schema https://developmentfinance.org/descriptions/schema/v1/description.schema.json", + "properties": { + "describes": {}, + "title": {}, + "about": {}, + "sources": {}, + "freshness": {}, + "steps": {}, + "cite": {}, + "caveats": {}, + "gaps": {}, + "built_from": {} + } + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/{content_version}/description/values": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Description Values", + "operationId": "datasets_get_description_values", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + }, + { + "name": "property", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Property" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 100, + "title": "Limit" + } + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DescriptionValuesPage" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/{content_version}/files/{digest}": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get File", + "operationId": "datasets_get_file", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + }, + { + "name": "digest", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Digest" + } + } + ], + "responses": { + "302": { + "description": "a redirect to the artifact's bytes", + "headers": { + "Location": { + "description": "a GET URL signed for at most five minutes", + "schema": { + "type": "string" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/{content_version}/file": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Version File", + "description": "Redirect to the version's file in the format, bundle and layout the query names,\nrenewing an aged copy whose bytes survive, else rendering it from the version's stored\nframe.", + "operationId": "datasets_get_version_file", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "description": "the file format; csv when absent", + "schema": { + "type": "string", + "enum": [ + "csv", + "xlsx", + "parquet" + ], + "default": "csv" + } + }, + { + "name": "bundle", + "in": "query", + "required": false, + "description": "true for a zip bundle with its documentation; true when absent", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "layout", + "in": "query", + "required": false, + "description": "frame for a bare parquet file in the frame layout; needs format=parquet and bundle=false", + "schema": { + "type": "string", + "enum": [ + "frame" + ] + } + } + ], + "responses": { + "302": { + "description": "a redirect to the artifact's bytes", + "headers": { + "Location": { + "description": "a GET URL signed for at most five minutes", + "schema": { + "type": "string" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/{content_version}/observations": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Observations", + "operationId": "datasets_get_observations", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SpecObservations" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/{id}/{content_version}/pin": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Post Pin", + "description": "Pin an artifact of a version, and the frame its files render from: the version's own frame and, for a derived version, its base version's frame, servable or aged, so every format stays fetchable and the version reports `retention.pinned`. A frame whose bytes are gone stays unpinned: the named artifact still pins, and `retention` keeps that frame's `held_until`. Only the named artifact's copy waits on the daily pin budget; the frame copies skip it and count toward later calls, so one pin can add up to three copies to the count.", + "operationId": "datasets_post_pin", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PinRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PinResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/datasets/frames/publish": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Post Publish", + "description": "Publish a validated body under the permit the route class took for this request.", + "operationId": "datasets_post_publish", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublishFrameRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublishFrameResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/healthz": { + "get": { + "tags": [ + "Graph" + ], + "summary": "Get Health", + "operationId": "graph_get_health", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HealthResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/capabilities": { + "get": { + "tags": [ + "Graph" + ], + "summary": "Get Capabilities", + "operationId": "graph_get_capabilities", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/graph_api__capabilities__Capabilities" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/schema": { + "get": { + "tags": [ + "Graph" + ], + "summary": "Get Schema", + "operationId": "graph_get_schema", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GraphSchema" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/resolve": { + "post": { + "tags": [ + "Graph" + ], + "summary": "Resolve", + "operationId": "graph_resolve", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/graph_api__resolve_models__ResolveRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/documentation/{dcid}": { + "get": { + "tags": [ + "Graph" + ], + "summary": "Get Documentation", + "operationId": "graph_get_documentation", + "parameters": [ + { + "name": "dcid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Dcid" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SourceDocumentation" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/sources": { + "get": { + "tags": [ + "Graph" + ], + "summary": "List Sources", + "operationId": "graph_list_sources", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SourceCatalogue" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/node/{dcid}/members": { + "get": { + "tags": [ + "Graph" + ], + "summary": "List Members", + "operationId": "graph_list_members", + "parameters": [ + { + "name": "dcid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Dcid" + } + }, + { + "name": "relation", + "in": "query", + "required": true, + "schema": { + "enum": [ + "codes", + "children", + "datasets", + "variables", + "members", + "countries", + "facets" + ], + "type": "string", + "title": "Relation" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 200, + "title": "Limit" + } + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + }, + { + "name": "projection", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/Projection" + }, + { + "type": "null" + } + ], + "title": "Projection" + } + }, + { + "name": "as_of", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "As Of" + } + }, + { + "name": "source", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source" + } + }, + { + "name": "unit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Unit" + } + }, + { + "name": "measurement_method", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Measurement Method" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MembersPage" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/roots": { + "get": { + "tags": [ + "Graph" + ], + "summary": "List Roots", + "operationId": "graph_list_roots", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Roots" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/node/{dcid}": { + "get": { + "tags": [ + "Graph" + ], + "summary": "Get Node", + "operationId": "graph_get_node", + "parameters": [ + { + "name": "dcid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Dcid" + } + }, + { + "name": "as_of", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "As Of" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/StatVarNode" + }, + { + "$ref": "#/components/schemas/CodeSystemNode" + }, + { + "$ref": "#/components/schemas/CodeNode" + }, + { + "$ref": "#/components/schemas/GroupNode" + }, + { + "$ref": "#/components/schemas/CountryNode" + }, + { + "$ref": "#/components/schemas/ContinentNode" + }, + { + "$ref": "#/components/schemas/SubregionNode" + }, + { + "$ref": "#/components/schemas/ContinentalUnionNode" + }, + { + "$ref": "#/components/schemas/PlaceOtherNode" + }, + { + "$ref": "#/components/schemas/OrganisationNode" + }, + { + "$ref": "#/components/schemas/AggregateNode" + }, + { + "$ref": "#/components/schemas/UnitNode" + }, + { + "$ref": "#/components/schemas/SourceNode" + }, + { + "$ref": "#/components/schemas/DatasetNode" + }, + { + "$ref": "#/components/schemas/ProvenanceNode" + }, + { + "$ref": "#/components/schemas/OtherNode" + } + ], + "discriminator": { + "propertyName": "kind", + "mapping": { + "stat_var": "#/components/schemas/StatVarNode", + "code_system": "#/components/schemas/CodeSystemNode", + "code": "#/components/schemas/CodeNode", + "group": "#/components/schemas/GroupNode", + "country": "#/components/schemas/CountryNode", + "continent": "#/components/schemas/ContinentNode", + "subregion": "#/components/schemas/SubregionNode", + "continental_union": "#/components/schemas/ContinentalUnionNode", + "place_other": "#/components/schemas/PlaceOtherNode", + "organisation": "#/components/schemas/OrganisationNode", + "aggregate": "#/components/schemas/AggregateNode", + "unit": "#/components/schemas/UnitNode", + "source": "#/components/schemas/SourceNode", + "dataset": "#/components/schemas/DatasetNode", + "provenance": "#/components/schemas/ProvenanceNode", + "other": "#/components/schemas/OtherNode" + } + }, + "title": "Response Graph Get Node" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/graph/nodes": { + "post": { + "tags": [ + "Graph" + ], + "summary": "Get Nodes", + "operationId": "graph_get_nodes", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodesResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/healthz": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Get Health", + "operationId": "presentation_get_health", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HealthResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/capabilities": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Get Capabilities", + "operationId": "presentation_get_capabilities", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CapabilitiesResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/components": { + "post": { + "tags": [ + "Presentation" + ], + "summary": "Create Component", + "operationId": "presentation_create_component", + "parameters": [ + { + "name": "x-dfo-write-token", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "X-Dfo-Write-Token" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateComponentBody" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReplyResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/components/{component_id}": { + "patch": { + "tags": [ + "Presentation" + ], + "summary": "Revise Component", + "operationId": "presentation_revise_component", + "parameters": [ + { + "name": "component_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Component Id" + } + }, + { + "name": "x-dfo-write-token", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "X-Dfo-Write-Token" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ComponentBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WriteReplyResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + }, + "get": { + "tags": [ + "Presentation" + ], + "summary": "Read Component", + "operationId": "presentation_read_component", + "parameters": [ + { + "name": "component_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Component Id" + } + }, + { + "name": "revision", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Revision" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ComponentReadResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/components/{component_id}/revisions/{revision}/data": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Read Component Data", + "operationId": "presentation_read_component_data", + "parameters": [ + { + "name": "component_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Component Id" + } + }, + { + "name": "revision", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "minimum": 1, + "title": "Revision" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "csv", + "xlsx", + "parquet" + ], + "type": "string", + "default": "csv", + "title": "Format" + } + }, + { + "name": "bundle", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Bundle" + } + } + ], + "responses": { + "200": { + "description": "The rows behind every value the revision shows. `bundle=true` serves a zip holding the file under `data/` with `data/codes.csv`, `datapackage.json`, `CITATION.cff`, `README.md`, and `SOURCES.md`.", + "content": { + "application/zip": {}, + "text/csv": {}, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {}, + "application/vnd.apache.parquet": {} + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/components/{component_id}/revisions/{revision}/render": { + "post": { + "tags": [ + "Presentation" + ], + "summary": "Render Component Revision", + "description": "Draw one stored revision on the frame the body names. Appends no revision.", + "operationId": "presentation_render_component_revision", + "parameters": [ + { + "name": "component_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Component Id" + } + }, + { + "name": "revision", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "minimum": 1, + "title": "Revision" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenderBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ComponentReadResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/components/{component_id}/revisions/{revision}/render/data": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Read Rendered Component Data", + "description": "The data export of one stored revision drawn on the frame the query names.", + "operationId": "presentation_read_rendered_component_data", + "parameters": [ + { + "name": "component_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Component Id" + } + }, + { + "name": "revision", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "minimum": 1, + "title": "Revision" + } + }, + { + "name": "spec_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Spec Id" + } + }, + { + "name": "content_version", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "csv", + "xlsx", + "parquet" + ], + "type": "string", + "default": "csv", + "title": "Format" + } + }, + { + "name": "bundle", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Bundle" + } + } + ], + "responses": { + "200": { + "description": "The rows behind every value the revision shows when drawn on the named frame, as the component data route serves a stored revision's.", + "content": { + "application/zip": {}, + "text/csv": {}, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {}, + "application/vnd.apache.parquet": {} + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/frames/{spec_id}/{content_version}": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Get Frame", + "operationId": "presentation_get_frame", + "parameters": [ + { + "name": "spec_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Spec Id" + } + }, + { + "name": "content_version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Content Version" + } + }, + { + "name": "dimension", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Dimension" + } + }, + { + "name": "query", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + } + } + ], + "responses": { + "200": { + "description": "Neither `dimension` nor `query` given returns the frame's structural view. `dimension` alone returns that one dimension's full value list. `query` alone returns every dimension filtered to values matching the query. `dimension` and `query` together return that one dimension's values filtered to the query.", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/FrameStructuralViewResponse" + }, + { + "$ref": "#/components/schemas/FrameDimensionValuesResponse" + }, + { + "$ref": "#/components/schemas/FrameFilteredViewResponse" + } + ], + "title": "Response 200 Presentation Get Frame" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/presentation/release": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Get Release", + "operationId": "presentation_get_release", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseDocumentResponse" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/codes/{code}": { + "get": { + "tags": [ + "Codes" + ], + "summary": "Get Code", + "operationId": "codes_get_code", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Code" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CodeRegistryEntry" + } + } + } + }, + "default": { + "description": "any non-2xx response uses this envelope", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "400": { + "description": "the request body or parameters failed validation (request_invalid)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "AggregateNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "aggregate", + "title": "Kind", + "default": "aggregate" + }, + "aggregate": { + "$ref": "#/components/schemas/PartyBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "aggregate" + ], + "title": "AggregateNode" + }, + "AidCounts": { + "properties": { + "donors": { + "type": "integer", + "title": "Donors", + "description": "distinct donors: countries and organisations, leaving out the parties that total other donors (DAC countries, the G7)" + }, + "recipients": { + "type": "integer", + "title": "Recipients", + "description": "distinct recipients: countries, organisations and the residuals no country holds (Africa, unallocated by country), leaving out the parties that total other recipients (Africa, Total)" + }, + "years": { + "anyOf": [ + { + "$ref": "#/components/schemas/YearRange" + }, + { + "type": "null" + } + ], + "description": "the years with aid data; null when none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "donors", + "recipients", + "years" + ], + "title": "AidCounts", + "description": "Counts over the coverage index's rows of the declared datasets." + }, + "AmbiguousEntityCandidate": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the candidate's own dcid" + }, + "label": { + "type": "string", + "title": "Label", + "description": "the candidate's display name" + }, + "kind": { + "type": "string", + "title": "Kind", + "description": "the candidate's entity kind: country, continent, subregion, continental_union, organisation, aggregate, place_other, or other" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label", + "kind" + ], + "title": "AmbiguousEntityCandidate", + "description": "One graph node an ambiguous query wording could name -- one entry of\nan AmbiguousEntityGroup's own `candidates`. Mirrors engine.region.result.\nAmbiguousEntityCandidate field-for-field, with `label` in place of that\ndataclass's `name` (this contract's own vocabulary for a display\nstring, matching ResolvedEntity.label), except that it omits `group_node`\nand `group_name`, which only NoData.options read." + }, + "AmbiguousEntityGroup": { + "properties": { + "text": { + "type": "string", + "title": "Text", + "description": "the ambiguous query wording; equals some restatement.entities[i].text on the same part" + }, + "candidates": { + "items": { + "$ref": "#/components/schemas/AmbiguousEntityCandidate" + }, + "type": "array", + "title": "Candidates", + "description": "the graph candidates this wording could name -- 2+ from a real Ambiguous resolution, by construction of the resolver's own Ambiguous outcome (2+ candidates graph-confirm and none can be preferred); not constrained to a minimum here since region.AmbiguousEntity, this field's own engine-side source, carries no such constraint of its own" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text", + "candidates" + ], + "title": "AmbiguousEntityGroup", + "description": "One query wording Ambiguous resolved to more than one graph\ncandidate, paired with the candidates it could name -- one entry of\nNoData.ambiguous_entities." + }, + "AmbiguousSourceCandidate": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the source's reference, which a client posts back as a SourceMention's ref" + }, + "label": { + "type": "string", + "title": "Label", + "description": "the source's display name in the origin catalogue" + }, + "kind": { + "type": "string", + "enum": [ + "provenance", + "dataset", + "source" + ], + "title": "Kind", + "description": "what the reference names: a provenance, a catalogue Dataset, or a publishing Source" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label", + "kind" + ], + "title": "AmbiguousSourceCandidate", + "description": "One reading of an ambiguous source wording -- one entry of an\nAmbiguousSourceGroup's own `candidates`." + }, + "AmbiguousSourceGroup": { + "properties": { + "text": { + "type": "string", + "title": "Text", + "description": "the ambiguous wording; equals some restatement.sources[i].text on the part, or its restatement.source_code for source_code_ambiguous" + }, + "candidates": { + "items": { + "$ref": "#/components/schemas/AmbiguousSourceCandidate" + }, + "type": "array", + "title": "Candidates", + "description": "the admitted sources this wording names, two or more: provenances first, then datasets and sources" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text", + "candidates" + ], + "title": "AmbiguousSourceGroup", + "description": "One source wording that names two or more unrelated admitted sources, paired with\nthe sources it could name -- one entry of NoData.ambiguous_sources." + }, + "AppliedDefaultModel": { + "properties": { + "pointer": { + "type": "string", + "title": "Pointer", + "description": "a JSON Pointer to the intent field this default fills" + }, + "detail": { + "type": "string", + "title": "Detail", + "description": "what the component chose and how to narrow it, in plain language" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "pointer", + "detail" + ], + "title": "AppliedDefaultModel", + "description": "One `fact_summary.defaults[]` entry: a choice the component made where its intent\nleft one open. An entity-mode bar_chart whose select lists no values draws every value\nof its one varying dimension, largest first." + }, + "ArtifactEntryModel": { + "properties": { + "artifact_digest": { + "type": "string", + "title": "Artifact Digest" + }, + "rendering": { + "additionalProperties": true, + "type": "object", + "title": "Rendering", + "description": "the rendering that produced the bytes: the request options of a requested file, {\"statistics\": \"series\"} for the series statistics, or {\"format\": \"frame\"} for the version's canonical frame, a Parquet file of the frame as minted" + }, + "bytes": { + "type": "integer", + "title": "Bytes" + }, + "media_type": { + "type": "string", + "title": "Media Type" + }, + "created_at": { + "type": "string", + "title": "Created At" + }, + "tier": { + "type": "string", + "title": "Tier" + }, + "url": { + "type": "string", + "title": "Url", + "description": "the artifact's stable download link, `/api/datasets/{id}/{content_version}/files/{artifact_digest}`, relative to the API host. It never expires: each request checks the version and answers 302 to a signed URL valid for five minutes, or refuses snapshot_revoked once the version is taken down" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "artifact_digest", + "rendering", + "bytes", + "media_type", + "created_at", + "tier", + "url" + ], + "title": "ArtifactEntryModel" + }, + "Assumption": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "declared_default", + "open_role", + "place_scope" + ], + "title": "Kind", + "description": "what the engine filled. 'declared_default' is a slot the request left open that its code system's or shape's declared default fixed. 'open_role' is a flow role no request word asked for, read across every entity on it with data, as one series per member where the role scope default filled it and the shape declares the role, else as the total over them. 'place_scope' is a request that named no place, read across every place with data" + }, + "binding_ref": { + "type": "string", + "maxLength": 1036, + "title": "Binding Ref", + "description": "the identity binding whose edit replaces this assumption: 'how:' for a declared default, 'origin:' or 'where:' for a role or the place scope, as on the sentence's own tokens" + }, + "text": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "title": "Text", + "description": "the words the sentence's assumptions clause states for this fill: the bound code's full label for a declared default ('official development assistance' for CRSTypeOfFlow10, whose short name is 'ODA'), 'every' and the role's noun in the answer's flow family for an open role ('every provider', 'every creditor'), and 'every country', 'every place' or 'the world as a whole' for the place scope, as its members are typed" + }, + "refs": { + "items": { + "type": "string", + "maxLength": 1024 + }, + "type": "array", + "maxItems": 1, + "title": "Refs", + "description": "the value dcid a declared default bound its slot to, as the slot's trace.slot_filters[].refs list it (['CRSTypeOfFlow10'] for official development assistance). An open role and the place scope carry []. A dataset_resubmit echo matches a declared default to its slot by these values" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "kind", + "binding_ref", + "text" + ], + "title": "Assumption", + "description": "One value the answer filled that its request did not ask for, stated for people\nin `text` and for code in `kind`, `binding_ref` and `refs`.\n\nAssumptions live on the part (`_PartBase.assumptions`), and a candidates part holds\neach shown reading's own list as well (`CandidatesPart.reading_assumptions`), the one\na client echoes on a dataset_resubmit after picking that reading. The sentence that\ncarries the part closes with them as one clause: \"Assumed: official development\nassistance; every provider.\"" + }, + "Authority": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "version": { + "type": "string", + "title": "Version" + } + }, + "type": "object", + "required": [ + "name", + "version" + ], + "title": "GraphMembershipAuthority", + "description": "Where a membership's rows come from, with the data version that reproduces them." + }, + "Availability": { + "properties": { + "scope": { + "type": "string", + "const": "dfo", + "title": "Scope", + "default": "dfo" + }, + "summary": { + "$ref": "#/components/schemas/AvailabilitySummary" + }, + "default": { + "anyOf": [ + { + "$ref": "#/components/schemas/AvailabilityDefault" + }, + { + "type": "null" + } + ], + "description": "null when no facet dispatches a request naming nothing" + }, + "sources": { + "items": { + "$ref": "#/components/schemas/SourceAvailability" + }, + "type": "array", + "title": "Sources" + }, + "more_sources": { + "type": "integer", + "title": "More Sources", + "description": "the sources past the first ten" + } + }, + "type": "object", + "required": [ + "scope", + "summary", + "default", + "sources", + "more_sources" + ], + "title": "GraphAvailability", + "description": "Where DFO holds observations of a variable. `sources: []` means it verifiably holds\nnone." + }, + "AvailabilityDefault": { + "properties": { + "facets": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Facets", + "description": "the facet ids the request is served, in order" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/AvailabilitySource" + }, + { + "type": "null" + } + ] + }, + "unit": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ] + }, + "measurement_method": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ] + }, + "observation_period": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Observation Period" + }, + "first_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Year" + }, + "last_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Year" + }, + "places": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Places", + "description": "null for a role-bearing variable" + }, + "without_data": { + "type": "integer", + "title": "Without Data", + "description": "the places, or parties, holding the variable that the default leaves without data" + } + }, + "type": "object", + "required": [ + "facets", + "source", + "unit", + "measurement_method", + "observation_period", + "first_year", + "last_year", + "places", + "without_data" + ], + "title": "GraphAvailabilityDefault", + "description": "What a data request naming no place, years or facet receives." + }, + "AvailabilitySource": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + }, + "documentation": { + "type": "string", + "title": "Documentation", + "description": "the path of the provenance's source document" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "documentation" + ], + "title": "GraphAvailabilitySource", + "description": "A source that holds the variable: its provenance, labelled with the catalogue's name." + }, + "AvailabilitySummary": { + "properties": { + "places": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Places", + "description": "the places covered by kind; null for a role-bearing variable, and while the places' kinds are unread (a transient gap)" + }, + "entities": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/EntityCounts" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Entities", + "description": "the entities covered per graph role; null for any other variable" + }, + "first_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Year" + }, + "last_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Year" + }, + "sources": { + "type": "integer", + "title": "Sources" + }, + "facets": { + "type": "integer", + "title": "Facets" + } + }, + "type": "object", + "required": [ + "places", + "entities", + "first_year", + "last_year", + "sources", + "facets" + ], + "title": "GraphAvailabilitySummary", + "description": "The variable across every source." + }, + "BaseIdentity": { + "properties": { + "identity_version": { + "type": "string", + "const": "spec1", + "title": "Identity Version", + "description": "the identity domain separator this Spec was hashed under", + "default": "spec1" + }, + "shape": { + "oneOf": [ + { + "$ref": "#/components/schemas/IdentityShapeSchema" + }, + { + "$ref": "#/components/schemas/IdentityShapePin" + } + ], + "title": "Shape", + "description": "the shape this Spec was hashed under", + "discriminator": { + "propertyName": "kind", + "mapping": { + "stat_var": "#/components/schemas/IdentityShapePin", + "statvar_schema": "#/components/schemas/IdentityShapeSchema" + } + } + }, + "slots": { + "items": { + "$ref": "#/components/schemas/IdentitySlot" + }, + "type": "array", + "maxItems": 64, + "title": "Slots", + "description": "the what/how slots that feed identity -- where/when/source are excluded" + }, + "entities": { + "additionalProperties": { + "items": { + "type": "string", + "maxLength": 1024 + }, + "type": "array", + "maxItems": 1024, + "minItems": 1 + }, + "type": "object", + "maxProperties": 16, + "title": "Entities", + "description": "the bound entities, keyed by role (observationAbout/origin/destination); {} when none were bound -- always present, never omitted. A role that appears carries at least one dcid: the identity core refuses a role with zero members, so an empty list must not be expressible here" + }, + "requested_window": { + "oneOf": [ + { + "$ref": "#/components/schemas/IdentityWindowAll" + }, + { + "$ref": "#/components/schemas/IdentityWindowLatest" + }, + { + "$ref": "#/components/schemas/IdentityWindowRange" + } + ], + "title": "Requested Window", + "description": "the requested date window this Spec was hashed under; always present -- {\"kind\": \"all\"} means no date was requested at all", + "discriminator": { + "propertyName": "kind", + "mapping": { + "all": "#/components/schemas/IdentityWindowAll", + "latest": "#/components/schemas/IdentityWindowLatest", + "range": "#/components/schemas/IdentityWindowRange" + } + } + }, + "facets": { + "anyOf": [ + { + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/IdentityBindingValue" + }, + { + "$ref": "#/components/schemas/IdentityBindingSet" + }, + { + "$ref": "#/components/schemas/IdentityFacetValueRequest" + }, + { + "$ref": "#/components/schemas/IdentityFacetValueAbsent" + } + ] + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Facets", + "description": "sparse facet bindings (provenance/measurementMethod/unit); omitted entirely when no facet axis is bound, never an empty object. A facet axis that appears is bound -- value, set, or (unit axis only) the request form -- never unbound: the identity core refuses an unbound facet binding state, since a sparse map omits what is not bound rather than carrying it as unbound" + }, + "open_roles": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/RoleAxis" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Open Roles", + "description": "the flow axes asked for member by member (every creditor, every donor), sorted and de-duplicated; omitted when none is. A role absent from both entities and open_roles asks for the total over that role. An open role is never also an entities key, and a pinned shape (kind='stat_var') carries none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "shape", + "slots", + "requested_window" + ], + "title": "BaseIdentity", + "description": "The spec1 identity-core projection document for one Spec: exactly what\ngets hashed to produce its spec_id, serialised once and echoed back\nverbatim -- never re-derived by a second, parallel implementation.\n\nEvery Spec carries one, on `Spec.definition.identity` (see\n`SpecDefinition`). A dataset_resubmit identity entry posts a prior Spec's own\n`definition.identity` byte-for-byte as its edited `identity`. Directional\nentities live directly in `identity.entities.origin` and\n`identity.entities.destination`. StatVar members are graph state, derived from the\nidentity, and no member here.\n\nThe document is hashed whole. `\"spec_\"` plus the first 32 hex digits of\nthe SHA-256 of its RFC 8785 serialisation, with null members omitted, is\nthe Spec's spec_id." + }, + "Binding": { + "properties": { + "provenance": { + "type": "string", + "title": "Provenance" + }, + "measurementMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Measurementmethod" + }, + "unit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Unit" + } + }, + "type": "object", + "required": [ + "provenance", + "measurementMethod", + "unit" + ], + "title": "GraphAvailabilityBinding", + "description": "The `scope.facets` values that request a series from Datasets, in its leading unit." + }, + "BindingSet": { + "properties": { + "kind": { + "type": "string", + "const": "set", + "title": "Kind", + "description": "binding kind discriminator", + "default": "set" + }, + "values": { + "items": { + "$ref": "#/components/schemas/SlotValue" + }, + "type": "array", + "minItems": 2, + "title": "Values", + "description": "two or more members, all in scope (a union)" + }, + "set_ref": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the group the set was drawn from, when one exists" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "values" + ], + "title": "BindingSet", + "description": "A slot bound to two or more taxonomy members, all in scope." + }, + "BindingUnbound": { + "properties": { + "kind": { + "type": "string", + "const": "unbound", + "title": "Kind", + "description": "explicit whole slot in scope, NOT null/missing", + "default": "unbound" + } + }, + "additionalProperties": false, + "type": "object", + "title": "BindingUnbound", + "description": "A slot explicitly open to the whole slot in scope, NOT null or missing." + }, + "BindingValue": { + "properties": { + "kind": { + "type": "string", + "const": "value", + "title": "Kind", + "description": "binding kind discriminator", + "default": "value" + }, + "value": { + "$ref": "#/components/schemas/SlotValue", + "description": "exactly one taxonomy member" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "value" + ], + "title": "BindingValue", + "description": "A slot bound to exactly one taxonomy member." + }, + "BreadthDim": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "the dimension, e.g. providers, years, methods, sources" + }, + "count": { + "type": "integer", + "title": "Count", + "description": "e.g. 36, 22, 3" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "label", + "count" + ], + "title": "BreadthDim", + "description": "One breadth dimension with its cardinality." + }, + "BundleOptionModel": { + "properties": { + "state": { + "type": "string", + "title": "State" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reason" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "state" + ], + "title": "BundleOptionModel" + }, + "CandidateSet": { + "properties": { + "ordering": { + "type": "string", + "enum": [ + "broadest_first", + "intent_rank" + ], + "title": "Ordering", + "description": "how `specs` below is ordered -- see the two orderings described above" + }, + "max_candidates": { + "type": "integer", + "title": "Max Candidates", + "description": "the maximum number of candidates applied" + }, + "specs": { + "items": { + "$ref": "#/components/schemas/Spec", + "description": "the resolved Spec answering this part. Parts whose specs share a spec_id are one reading of the data, the same series, entities and years. A later part that folds into an earlier part's spec carries binding_folded. A part posted with separate: true never folds and keeps its own part, so two separate parts can carry one spec_id by request. Parts sharing a spec_id can differ in assumptions, so a client never dedupes parts by spec_id" + }, + "type": "array", + "minItems": 2, + "title": "Specs", + "description": "2 <= len <= max_candidates; full Specs, ordered per `ordering` above" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "false when every eligible, semantically distinct candidate shape found for this query is present in specs; true when the engine's own candidate budget dropped an eligible shape before it could be considered, or max_candidates itself cut the ordered list short" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ordering", + "max_candidates", + "specs", + "truncated" + ], + "title": "CandidateSet", + "description": "A set of 2..N competing Specs, presented in the order named by ``ordering``.\n\n``ordering=\"intent_rank\"``: the order the status rule offers the readings in. A first\nanswer always uses it. The elected reading comes first, then its rivals in menu order,\neach stating why it is offered (``ResolvedSpec.basis``). Where the elected reading holds\nno data and several siblings differing from it only on the measurement qualifier do,\nthose siblings are the set, in menu order, without it. Where a place named without a\ndirection holds data under both, the elected reading under each direction is offered.\n\n``ordering=\"broadest_first\"``: a posted candidates entry that names it\n(``ResubmitCandidatesEntry``) keeps its posted order and states this ordering back. No\nfirst answer uses it.\n\nEach candidate carries its own heading and byline inside its own\n``resolved.rendered_sentence``/``resolved.sentence_plan``. There is no separate parallel sentence array, and a\ncandidate's Spec is a returned Spec like any other. The part's own\nsentence opens with how many readings there are and states, for each\nshown candidate, the source and span that set it apart." + }, + "CandidatesPart": { + "properties": { + "variable_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Variable Text", + "description": "the variable text this part answers, in the order asked. This part's position in Resolution.parts equals the same variable_index every SSE event keyed by variable_index uses (ShapeEvent, StepEvent, SentenceEvent). Every dataset_resubmit entry kind (identity, candidates, placeholder, and parsed through its nested ParsedPart) requires its own posted variable_text, so this field is always the posted text echoed back onto the rebuilt part, never null. Null only when the whole posted query was empty or whitespace-only (raw_text door), which refuses variable_not_resolved before extraction runs and so has no text to name." + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part was asked beside the others to be compared with them. A client resubmitting an identity, candidate set, or placeholder posts this flag on that entry to preserve the comparison. Two parts marked separate that resolve to one reading carry the same spec_id and stay two parts. False, the default, is omitted", + "default": false + }, + "warnings": { + "items": { + "$ref": "#/components/schemas/Warning" + }, + "type": "array", + "title": "Warnings", + "description": "this part's own run-health signals. A part folded into an earlier part's spec (see DefinitePart.spec) carries binding_folded alone. The merged spec's own resolved warnings live only on the first part that carries it. An unfolded part carries the warnings raised while resolving this part, plus observations_omitted on a candidates part when response_options.include_observations was set." + }, + "timing_ms": { + "anyOf": [ + { + "$ref": "#/components/schemas/Timing" + }, + { + "type": "null" + } + ], + "description": "this part's own latency breakdown, where by_step names only the phases this part ran and total sums them, leaving out the shape_* stages nested inside shape. Excludes the shared, once-per-request steps (e.g. extract), which diagnostics.timing_ms.by_step carries once for the whole request; distinct too from diagnostics.timing_ms.total, the whole request's wall-clock elapsed time." + }, + "rendered_sentence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Rendered Sentence", + "description": "a human-readable string. For candidates, a header naming how many readings there are ('3 readings.'), then each shown candidate's heading and a byline led by the source and span that set it apart; for no_data, a heading in the same claim form naming the entity, measure, and counterpart that were checked. Either ends with the text of this part's departures, in order, and a candidates part's then closes with its assumptions clause. For a definite part this stays null or omitted: the confirmation sentence (heading and byline) lives at spec.resolved.rendered_sentence, and its departures reach the envelope's composed sentence." + }, + "sentence_plan": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentence Plan", + "description": "the ordered token form of rendered_sentence, present whenever it is. For a definite part this stays null or omitted. spec.resolved.sentence_plan carries the confirmation sentence's own plan instead." + }, + "restatement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ParsedPart" + }, + { + "type": "null" + } + ], + "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + }, + "departures": { + "items": { + "$ref": "#/components/schemas/Departure" + }, + "type": "array", + "title": "Departures", + "description": "every way this part's answer differs from what its request asked, ordered by how much each changes the number: closest_match, measure_not_applied, operation_not_applied, breakdown_not_applied, entity_unavailable, year_unavailable, modelled_values, group_read_as_members, direction_discarded, direction_inferred, scope_limited. [] when the answer is what was asked. A client that renders its own sentence reads them here; each one's text also closes the sentence that carries this part (see Departure.text). A warning on the same part reports run health and stays separate" + }, + "assumptions": { + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array", + "title": "Assumptions", + "description": "every value the engine filled that the request did not ask for, in clause order. Declared defaults come first, in the order of the Spec's trace.slot_filters, then open roles, then the place scope. A declared default is a slot the request left open that its code system's or shape's declared default fixed, named by the bound code's full label. An open role is a flow role no request word asked for, read across every entity on it with data. It is either a role the role scope default filled (resolved.scope on that axis), whatever its member count, served as one series per member where the shape declares the role, or a role the heading states with no entity of its own ('from 164 providers', 'owed to all creditors'), served as the total over its members. A role the identity binds in entities or lists in open_roles, that one of the part's operations runs over ('top 5 donors'), or that the request's words asked every member of ('all donors'), is asked. The place scope is a request that named no place, read across every place with data. Every door fills assumptions. A definite part reads them from its Spec, a candidates part carries the items every list in CandidatesPart.reading_assumptions holds alike, text included, and no_data and unsupported parts carry []. A dataset_resubmit identity entry posts every slot bound, so its part states the items of the entry's assumptions echo that still hold (see ResubmitIdentityEntry.assumptions), and a candidates entry reads each reading with its candidate's echo (see ResubmitCandidate.assumptions). The sentence that carries this part closes with them as one segment='assumption' clause ('Assumed: official development assistance; every provider.'), after its departures. [] when the answer fills nothing" + }, + "status": { + "type": "string", + "const": "candidates", + "title": "Status", + "description": "this part's variable was genuinely ambiguous" + }, + "candidates": { + "$ref": "#/components/schemas/CandidateSet", + "description": "2..N competing Specs" + }, + "reading_assumptions": { + "additionalProperties": { + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array" + }, + "type": "object", + "title": "Reading Assumptions", + "description": "each shown reading's own assumptions, keyed by its Spec's spec_id (candidates.specs[].spec_id). Each list is the one a definite part answering that Spec for this part's request carries, read with the part's operations and the axes the request's words asked every member of. The part's own assumptions are the items every list here holds alike, text included, so an open role one reading reads, or an item two readings word differently ('every provider' against 'every creditor'), is stated here alone. A client that picks a reading posts its identity as a dataset_resubmit identity entry and echoes reading_assumptions[spec_id] as the entry's assumptions, so the picked answer states what that reading assumed. A client that edits the set echoes each reading's entry as its candidate's assumptions. [] for a reading that assumes nothing" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "status", + "candidates" + ], + "title": "CandidatesPart", + "description": "This part's variable was genuinely ambiguous; two or more distinct specs compete." + }, + "CanonicalDefinition": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "the wire version this definition was written under" + }, + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "the caller-supplied spec_id this definition must hash to" + }, + "identity": { + "additionalProperties": true, + "type": "object", + "title": "Identity", + "description": "the identity-core document, shaped as search.models.identity.BaseIdentity and published at GET /api/search/schema" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "schema_version", + "spec_id", + "identity" + ], + "title": "CanonicalDefinition", + "description": "One canonical definition, exactly as the contract shapes it: the wire\nversion it was written under, its own spec_id (required -- the register\ndoor always verifies a supplied id, never mints one for a definition),\nand its identity-core document." + }, + "CapabilitiesResponse": { + "properties": { + "capability_version": { + "type": "string", + "title": "Capability Version", + "description": "a content hash over every capability-bearing field of the release this deployment serves" + }, + "catalog_version": { + "type": "string", + "title": "Catalog Version", + "description": "the catalogue release this deployment serves" + }, + "build": { + "type": "string", + "title": "Build", + "description": "the commit sha the image was built from, the same value the x-dfo-commit response header carries" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "capability_version", + "catalog_version", + "build" + ], + "title": "CapabilitiesResponse", + "description": "`GET /api/presentation/capabilities`'s body. It carries this\nsurface's own hashed `capability_version` beside the unhashed\n`catalog_version`." + }, + "CapabilityDefaultPolicy": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "the declared default policy's name" + }, + "live": { + "type": "boolean", + "title": "Live", + "description": "whether this deployment honours the declared default" + }, + "default": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Default", + "description": "the current default value, when this policy is a boolean toggle" + } + }, + "type": "object", + "required": [ + "name", + "live" + ], + "title": "CapabilityDefaultPolicy", + "description": "One declared default policy: whether it is live, and its current\ndefault value when it is a simple boolean toggle." + }, + "CapabilityFormat": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "csv, xlsx, or parquet" + }, + "live": { + "type": "boolean", + "title": "Live", + "description": "whether this deployment can render this format" + } + }, + "type": "object", + "required": [ + "name", + "live" + ], + "title": "CapabilityFormat", + "description": "One output rendering's liveness in this deployment." + }, + "CapabilityKind": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "spec_id or statvar_set" + }, + "live": { + "type": "boolean", + "title": "Live", + "description": "whether this deployment's mint door dispatches this kind" + } + }, + "type": "object", + "required": [ + "name", + "live" + ], + "title": "CapabilityKind", + "description": "One mint-request `kind`'s liveness in this deployment." + }, + "CatalogueAnswer": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1. Required on every response.", + "default": 1 + }, + "query_echo": { + "$ref": "#/components/schemas/QueryEcho", + "description": "what the response was understood to be answering" + }, + "diagnostics": { + "$ref": "#/components/schemas/Diagnostics", + "description": "run health, warnings, timing, build stamp" + }, + "kind": { + "type": "string", + "const": "catalogue", + "title": "Kind", + "description": "discriminator for a response to a question about what DFO holds", + "default": "catalogue" + }, + "scope": { + "$ref": "#/components/schemas/Scope-Output", + "description": "the place the question named, when it named a country" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "query_echo", + "diagnostics", + "scope", + "kind" + ], + "title": "CatalogueAnswer", + "description": "A resolve response to a question that asks what DFO holds and names\nneither an indicator nor a subject, such as \"what data do you have?\". It\ncarries the country the question named, when the resolver confirms one." + }, + "CatalogueExampleSentence": { + "properties": { + "text": { + "type": "string", + "title": "Text", + "description": "the template filled with the place's name" + }, + "template": { + "type": "string", + "title": "Template", + "description": "the sentence with a {place} slot" + }, + "stat_var": { + "type": "string", + "title": "Stat Var", + "description": "the StatVar the sentence resolves to" + }, + "place": { + "type": "string", + "title": "Place", + "description": "the country dcid the sentence is filled with" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text", + "template", + "stat_var", + "place" + ], + "title": "CatalogueExampleSentence", + "description": "An example sentence a client offers and runs as a query." + }, + "CatalogueResponse": { + "properties": { + "catalogue_version": { + "type": "string", + "title": "Catalogue Version", + "description": "the published build this body comes from" + }, + "counts": { + "anyOf": [ + { + "$ref": "#/components/schemas/Counts" + }, + { + "$ref": "#/components/schemas/PlaceCounts" + } + ], + "title": "Counts", + "description": "global counts, or the counts at the requested place" + }, + "examples": { + "items": { + "$ref": "#/components/schemas/CatalogueExampleSentence" + }, + "type": "array", + "title": "Examples" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "catalogue_version", + "counts", + "examples" + ], + "title": "CatalogueResponse", + "description": "What DFO holds and example sentences to ask of it." + }, + "Cause": { + "description": "The `cause` extension: why a refusal fired, beneath its own top-level\n`code` -- present only on a refusal that carries one (`recipe_not_declared`,\n`rate_coverage_gap`, `operation_failed`). On `operation_failed`, `code` is\nthe failed operation's refusal code. Mirrors `alternatives`/`truncated`'s\nown extension style: `entities` names what the cause concerns (entity or\n`entity@year` keys), capped, with `truncated` set when the cap cut items\nshort.", + "properties": { + "code": { + "description": "the cause code: a sub-cause such as nominal_undeclared, recipe_undeclared, or rate_missing, or on operation_failed the failed operation's own refusal code", + "title": "Code", + "type": "string" + }, + "entities": { + "description": "the entity or entity@year keys this cause concerns, in the order given, capped at 10; empty for a cause that names no entity", + "items": { + "type": "string" + }, + "maxItems": 10, + "title": "Entities", + "type": "array" + }, + "truncated": { + "default": false, + "description": "true when the entities cap cut items short", + "title": "Truncated", + "type": "boolean" + } + }, + "required": [ + "code" + ], + "title": "Cause", + "type": "object" + }, + "ChangeEntry": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "added", + "changed", + "deprecated", + "removed", + "fixed", + "security" + ], + "title": "Kind", + "description": "the Keep a Changelog group the change sits under" + }, + "note": { + "type": "string", + "title": "Note", + "description": "the change, as CommonMark" + } + }, + "type": "object", + "required": [ + "kind", + "note" + ], + "title": "ChangeEntry", + "description": "One change in a release." + }, + "ChangeModel": { + "properties": { + "kind": { + "type": "string", + "title": "Kind", + "description": "the Keep a Changelog group, lowercase: added, changed, deprecated, removed, fixed or security" + }, + "note": { + "type": "string", + "title": "Note", + "description": "the change, as CommonMark" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "kind", + "note" + ], + "title": "ChangeModel", + "description": "One change in a release of a source's DFO pipeline." + }, + "ChangedFieldModel": { + "properties": { + "field": { + "type": "string", + "title": "Field", + "description": "the intent field this entry reports" + }, + "prior": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "title": "Prior", + "description": "the field's value before the write, for a disclosed scalar" + }, + "new": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "title": "New", + "description": "the field's value after the write, for a disclosed scalar" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "field" + ], + "title": "ChangedFieldModel", + "description": "One entry of `changed[]`. `prior` and `new` are present only for a\nscalar field the write set changed. An array or object field carries\n`field` alone." + }, + "Choice": { + "properties": { + "chosen": { + "$ref": "#/components/schemas/StepRef" + }, + "others": { + "items": { + "$ref": "#/components/schemas/StepRef" + }, + "type": "array", + "maxItems": 32, + "title": "Others" + }, + "ranking": { + "items": { + "type": "string", + "pattern": "^[a-z][a-z0-9_]{0,63}$" + }, + "type": "array", + "maxItems": 8, + "minItems": 1, + "title": "Ranking" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "chosen", + "others", + "ranking" + ], + "title": "Choice", + "description": "A choice of source at mint: the source chosen, the others it was chosen over, and the\nranking it applied, in order." + }, + "CitationModel": { + "properties": { + "text": { + "type": "string", + "title": "Text" + }, + "sources": { + "items": { + "$ref": "#/components/schemas/CitationSource" + }, + "type": "array", + "title": "Sources" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text", + "sources" + ], + "title": "CitationModel" + }, + "CitationSource": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "string", + "title": "Label" + }, + "processing_level": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Processing Level" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "License" + }, + "license_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "License Type" + }, + "license_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "License Url" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/CitedSourceNode" + }, + { + "type": "null" + } + ] + }, + "data_commons": { + "anyOf": [ + { + "$ref": "#/components/schemas/CitedDataCommons" + }, + { + "type": "null" + } + ] + }, + "documentation": { + "anyOf": [ + { + "$ref": "#/components/schemas/CitedDocumentation" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "CitationSource", + "description": "One cited source, named through\n`materialise.provenance_doc.read_source_citations`. `label`, `url`,\n`source`, `data_commons`, the licence fields and `documentation` come\nfrom the origin catalogue where it lists `ref`, and from the graph\notherwise: `license` is the licence's label, `license_type` its\n`licenseType` dcid and `license_url` its terms page. `license`, `license_type`,\n`license_url` and `url` are `None` where neither the catalogue nor the graph declares one. `source`\nand `data_commons` are `None` for a ref the catalogue does not list.\n`documentation` is the source's documentation at first mint, `None` when\nnothing documents the source or its graph read failed. A mint\nleaves a stored citation as it is. A bundle render fills every field but\n`ref`, `label` and `processing_level` that is `None` from a live read for\nthat render only (`datasets_api.manifest.healed_citation`), and every set\nfield wins." + }, + "CitedDataCommons": { + "properties": { + "id": { + "type": "string", + "enum": [ + "dfo", + "base", + "un_system" + ], + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "label" + ], + "title": "CitedDataCommons", + "description": "The Data Commons that serves a cited provenance." + }, + "CitedDocumentation": { + "properties": { + "publisher": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Publisher", + "description": "the publishing organisation" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "what the source holds" + }, + "source_data_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Data Url", + "description": "where the raw data downloads from" + }, + "attribution": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Attribution", + "description": "the citation text the publisher asks for, verbatim" + }, + "update_cadence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Update Cadence", + "description": "how often the source updates, as display text such as 'Quarterly'; an unrecognised ISO 8601 duration passes through as stored" + }, + "last_update": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Update", + "description": "the date of the DFO's last refresh of the source" + }, + "years_covered": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Years Covered", + "description": "YYYY or YYYY-YYYY" + }, + "granularity": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Granularity", + "description": "such as 'Annual, by provider and recipient'" + }, + "currencies": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Currencies", + "description": "sorted ISO 4217 codes of the source's currencies" + }, + "transformation_log": { + "items": { + "$ref": "#/components/schemas/TransformationStepModel" + }, + "type": "array", + "title": "Transformation Log" + }, + "version_history": { + "items": { + "$ref": "#/components/schemas/ReleaseModel" + }, + "type": "array", + "title": "Version History", + "description": "the DFO pipeline's releases, newest first" + } + }, + "additionalProperties": false, + "type": "object", + "title": "CitedDocumentation", + "description": "A cited source's documentation at first mint, read by\n`materialise.provenance_doc.read_provenance_doc`, the reader behind\n`GET /api/graph/documentation/{ref}`. Each member is `None` or empty where the graph\ndocuments nothing." + }, + "CitedSourceNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "string", + "title": "Label" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "CitedSourceNode", + "description": "The Data Commons `Source` node behind a cited provenance. On the UN\nSystem Data Commons it is the agency provenance itself." + }, + "CodeBlock": { + "properties": { + "code_system": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the system's graph node, such as `CRSPurposeCodeEnum`" + }, + "property": { + "type": "string", + "title": "Property", + "description": "the constraint property the code is a value of" + }, + "code": { + "type": "string", + "title": "Code" + }, + "parent": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the code it specialises; null for a root" + }, + "synonyms": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Synonyms" + } + }, + "type": "object", + "required": [ + "code_system", + "property", + "code", + "parent", + "synonyms" + ], + "title": "GraphCodeBlock", + "description": "A code's detail block." + }, + "CodeItem": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + }, + "code": { + "type": "string", + "title": "Code" + }, + "parent": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Parent", + "description": "the parent code's dcid; null for a top-level code" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "code", + "parent" + ], + "title": "GraphCodeItem", + "description": "A code in a `codes` or `children` list, with its code and its parent's dcid." + }, + "CodeMappingEntry": { + "properties": { + "endpoint": { + "type": "string", + "title": "Endpoint" + }, + "channel": { + "type": "string", + "title": "Channel" + }, + "doors": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Doors" + }, + "http_status": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Http Status" + } + }, + "type": "object", + "required": [ + "endpoint", + "channel", + "doors", + "http_status" + ], + "title": "CodeMappingEntry", + "description": "One endpoint/channel combination a registered code is permitted on.\nMirrors `dfo_spec_kit.registry.CodeMapping`'s fields. `doors` and\n`http_status` are null when the registry entry omits them." + }, + "CodeNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "code", + "title": "Kind", + "default": "code" + }, + "code": { + "$ref": "#/components/schemas/CodeBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "code" + ], + "title": "CodeNode" + }, + "CodeRegistryEntry": { + "properties": { + "code": { + "type": "string", + "title": "Code" + }, + "classification": { + "anyOf": [ + { + "type": "string", + "enum": [ + "refusal", + "warning" + ] + }, + { + "type": "null" + } + ], + "title": "Classification" + }, + "definition": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Definition" + }, + "lifecycle": { + "anyOf": [ + { + "type": "string", + "enum": [ + "active", + "retired" + ] + }, + { + "type": "null" + } + ], + "title": "Lifecycle" + }, + "mappings": { + "items": { + "$ref": "#/components/schemas/CodeMappingEntry" + }, + "type": "array", + "title": "Mappings" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Title" + }, + "detail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Detail" + } + }, + "type": "object", + "required": [ + "code", + "classification", + "definition", + "lifecycle", + "mappings", + "title", + "detail" + ], + "title": "CodeRegistryEntry", + "description": "The wire shape of a successful `GET /codes/{code}` lookup, not the\n`ProblemDetails`/`Envelope` shape that carries `capability_version`,\n`trace_id`, and `type`. `dfo_platform.version` hashes this shape by\ncalling `registry_entry_body` through the `codes` module attribute, so\nany change here moves `PLATFORM_CAPABILITY_VERSION`.\n\n`classification`, `definition`, `lifecycle` and `mappings` come from\n`dfo_spec_kit.registry.REGISTRY`. `title` and `detail` come from the\nmerged refusal catalogue. Either source can lack the code. `title` and\n`detail` are null for a code the merged catalogue does not carry (a\nwarning, or a no-data reason), while `classification`, `definition` and\n`lifecycle` are null and `mappings` is empty for a code absent from the\nregistry. A client sees a missing source as null fields on a present\ncode, not as a vanished key set." + }, + "CodeSystemBlock": { + "properties": { + "property": { + "type": "string", + "title": "Property", + "description": "the constraint property the system governs" + }, + "plain_name": { + "type": "string", + "title": "Plain Name", + "description": "the property's plain name, such as `sector`" + }, + "declarations": { + "$ref": "#/components/schemas/CodeSystemDeclarations" + }, + "code_count": { + "type": "integer", + "title": "Code Count", + "description": "how many codes the code index holds for the system" + } + }, + "type": "object", + "required": [ + "property", + "plain_name", + "declarations", + "code_count" + ], + "title": "GraphCodeSystemBlock", + "description": "A code system's detail block." + }, + "CodeSystemDeclarations": { + "properties": { + "hierarchical": { + "type": "boolean", + "title": "Hierarchical", + "description": "whether its codes nest through specializationOf" + }, + "disjoint_from_children": { + "type": "boolean", + "title": "Disjoint From Children", + "description": "whether a parent code's records sit apart from its children's, so a parent's total is its own records plus its descendants' (CRS purposes); false where a parent row already totals its children (DAC1 aid types)" + }, + "summable": { + "type": "boolean", + "title": "Summable", + "description": "whether sibling values can rebuild a parent total" + }, + "absent_reading": { + "type": "string", + "enum": [ + "not_declared", + "aggregate" + ], + "title": "Absent Reading", + "description": "how a variable that does not declare the property reads" + } + }, + "type": "object", + "required": [ + "hierarchical", + "disjoint_from_children", + "summable", + "absent_reading" + ], + "title": "GraphCodeSystemDeclarations", + "description": "The rules a code system declares (`code_index.types.CodeSystemDeclaration`)." + }, + "CodeSystemNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "code_system", + "title": "Kind", + "default": "code_system" + }, + "code_system": { + "$ref": "#/components/schemas/CodeSystemBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "code_system" + ], + "title": "CodeSystemNode" + }, + "ColumnOptionModel": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "kind": { + "type": "string", + "title": "Kind" + }, + "droppable": { + "type": "boolean", + "title": "Droppable" + }, + "distinct": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Distinct" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "name", + "kind", + "droppable" + ], + "title": "ColumnOptionModel", + "description": "One frame column, verbatim from `materialise.profile.ColumnProfile`." + }, + "ComponentBody": { + "properties": { + "intent": { + "additionalProperties": true, + "type": "object", + "title": "Intent" + }, + "composition_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Composition Id" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "intent" + ], + "title": "ComponentBody", + "description": "The create and revise routes' shared request body. `extra=\"forbid\"`\nis what refuses a body carrying `session`/`caller`. An undeclared\nfield fails pydantic validation, which\n`presentation_api.refusals.request_validation_spec` classifies as\n`request_invalid` with no door-level code needed, `retryable` false. A\nrevise's `composition_id` is passed straight through to\n`write_component`, which refuses it (composition membership is\ncreate-only); this model does not distinguish the two routes." + }, + "ComponentReadResponse": { + "properties": { + "component_id": { + "type": "string", + "title": "Component Id", + "description": "the read component's own id" + }, + "revision": { + "type": "integer", + "title": "Revision", + "description": "the revision this read reports" + }, + "catalog_version": { + "type": "string", + "title": "Catalog Version", + "description": "the catalogue release this revision minted under" + }, + "composition_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Composition Id", + "description": "the composition this component belongs to, null outside one" + }, + "composition_revision": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Composition Revision", + "description": "the composition's current head revision, null outside one" + }, + "stored_intent": { + "additionalProperties": true, + "type": "object", + "title": "Stored Intent", + "description": "this revision's own stored intent, exactly as minted" + }, + "fact_summary": { + "$ref": "#/components/schemas/FactSummaryModel", + "description": "the closed, token-capped fact summary this revision reports" + }, + "resolved_payload": { + "additionalProperties": true, + "type": "object", + "title": "Resolved Payload", + "description": "the revision's stored resolved payload, verbatim: the catalogue envelope {schema_version, catalog_version, component_id, revision, provenance, component}, validated against the catalogue release's envelope schema (dfo-spec-kit envelope.schema.json) when minted. GET /api/presentation/release serves the pinned release's envelope_schema and the component_schemas its component field $refs by $id; every payload this door serves carries that pinned catalog_version." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "component_id", + "revision", + "catalog_version", + "composition_id", + "composition_revision", + "stored_intent", + "fact_summary", + "resolved_payload" + ], + "title": "ComponentReadResponse", + "description": "`GET /api/presentation/components/{component_id}`'s 200 body." + }, + "ComposedUnit": { + "properties": { + "numerator": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleUnit" + }, + { + "$ref": "#/components/schemas/VariableSide" + } + ], + "title": "Numerator" + }, + "denominator": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleUnit" + }, + { + "$ref": "#/components/schemas/VariableSide" + } + ], + "title": "Denominator" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "numerator", + "denominator" + ], + "title": "ComposedUnit", + "description": "A quotient's unit: the numerator's unit per the denominator's. Either side may be a\nvariable." + }, + "ComposedUnitModel": { + "properties": { + "numerator": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/ConvertedUnitModel" + }, + { + "$ref": "#/components/schemas/CountedStatVarModel" + } + ], + "title": "Numerator", + "description": "the unit of the measure divided" + }, + "denominator": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/ConvertedUnitModel" + }, + { + "$ref": "#/components/schemas/CountedStatVarModel" + } + ], + "title": "Denominator", + "description": "the unit of the measure divided by" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "numerator", + "denominator" + ], + "title": "ComposedUnitModel", + "description": "The unit of a quotient of two measures, read ` per `.\n\nEach side is a unit's graph name (its ref when the graph has none), a converted unit, or\nthe StatVar a unit-less side counts." + }, + "Constraint": { + "properties": { + "property": { + "$ref": "#/components/schemas/NodeRef" + }, + "value": { + "$ref": "#/components/schemas/NodeRef" + } + }, + "type": "object", + "required": [ + "property", + "value" + ], + "title": "GraphDefinitionConstraint", + "description": "One constraint: the property and the value the variable fixes it at." + }, + "ContinentNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "continent", + "title": "Kind", + "default": "continent" + }, + "continent": { + "$ref": "#/components/schemas/PlaceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "continent" + ], + "title": "ContinentNode" + }, + "ContinentalUnionNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "continental_union", + "title": "Kind", + "default": "continental_union" + }, + "continental_union": { + "$ref": "#/components/schemas/PlaceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "continental_union" + ], + "title": "ContinentalUnionNode" + }, + "ConversionCurrency": { + "properties": { + "code": { + "type": "string", + "title": "Code", + "description": "the ISO 4217 code a unit request names the currency by" + }, + "noun": { + "type": "string", + "title": "Noun", + "description": "the plural English noun the sentence's unit token names the currency by ('euros', 'Guatemalan quetzales')" + }, + "current_years": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "the first and last years a current-price request in this currency shows, the longest run of consecutive years, inside the years the answer serves (download.window), in which the recipe's exchange-rate table holds a rate for this currency and for the native currency of every facet the answer serves. It equals download.window when the conversion keeps every served year. With no download.window, the run the tables hold. Null when no year converts" + }, + "constant_years": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "the first and last years a constant-price request in this currency shows, at any base year from base_year_min to base_year_max, the longest run of consecutive years, read as current_years is, in which the exchange-rate table holds a rate for the native currency of every facet the answer serves and the deflator table a value for at least one entity the answer serves on the recipe's deflator role, bound or open. The conversion leaves out an entity's rows in the years its deflator lacks, and the answer names them (deflator_missing_omitted). Null when no year converts or no base year exists" + }, + "base_year_min": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Base Year Min", + "description": "the first base year a constant-price request in this currency converts at. With base_year_max it spans the run of consecutive years, ending at the latest, in which the deflator table holds an actual value, the exchange-rate table a rate for the currency, and the deflator table a value for at least one entity the answer serves on the recipe's deflator role. The conversion leaves out every row of an entity whose deflator lacks the base year, and the answer names it (deflator_missing_omitted). Null when no such year exists" + }, + "base_year_max": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Base Year Max", + "description": "the last base year a constant-price request in this currency converts at" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "noun", + "current_years", + "constant_years", + "base_year_min", + "base_year_max" + ], + "title": "ConversionCurrency", + "description": "One currency a unit request can convert this answer to, with the years each price\nbasis converts. A request whose tables leave out some of the years the answer serves\nshows the years stated here, and departs `year_unavailable` naming the table." + }, + "ConvertedUnitModel": { + "properties": { + "currency": { + "type": "string", + "title": "Currency", + "description": "the ISO 4217 code of the currency the values are in" + }, + "prices": { + "type": "string", + "enum": [ + "current", + "constant" + ], + "title": "Prices", + "description": "the price basis of the values" + }, + "base_year": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Base Year", + "description": "the base year of constant prices, absent for current prices" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "currency", + "prices" + ], + "title": "ConvertedUnitModel", + "description": "A converted unit, as the frame's `unit` cell states it." + }, + "CountedStatVarModel": { + "properties": { + "stat_var": { + "type": "string", + "title": "Stat Var", + "description": "the StatVar's `dcid:`-prefixed ref, as the frame holds it" + }, + "label": { + "type": "string", + "title": "Label", + "description": "the StatVar's graph name, or its ref without `dcid:` when the graph has none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "stat_var", + "label" + ], + "title": "CountedStatVarModel", + "description": "One side of a composed unit whose measure declares no unit, named by its StatVar." + }, + "CountryNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "country", + "title": "Kind", + "default": "country" + }, + "country": { + "$ref": "#/components/schemas/PlaceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "country" + ], + "title": "CountryNode" + }, + "Counts": { + "properties": { + "indicators": { + "type": "integer", + "title": "Indicators", + "description": "distinct StatVars search can serve: base, DFO and coverage variables" + }, + "datasets": { + "type": "integer", + "title": "Datasets", + "description": "distinct source-index entries of the admitted provenances" + }, + "publishers": { + "type": "integer", + "title": "Publishers", + "description": "distinct sources of the admitted provenances" + }, + "countries": { + "type": "integer", + "title": "Countries", + "description": "countries with base data in the origin catalogue or coverage rows" + }, + "aid": { + "$ref": "#/components/schemas/AidCounts" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "indicators", + "datasets", + "publishers", + "countries", + "aid" + ], + "title": "Counts", + "description": "What DFO holds, counted from one origin catalogue build and one\ncoverage index build." + }, + "CoverageBare": { + "properties": { + "kind": { + "type": "string", + "const": "bare", + "title": "Kind", + "description": "coverage kind discriminator", + "default": "bare" + }, + "has_data": { + "type": "boolean", + "title": "Has Data", + "description": "whether the region has any observations" + }, + "window": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "the date window, when known" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "has_data" + ], + "title": "CoverageBare", + "description": "Observation footprint with no count or dimensions; an honest could-not-count." + }, + "CoverageBreadth": { + "properties": { + "kind": { + "type": "string", + "const": "breadth", + "title": "Kind", + "description": "coverage kind discriminator", + "default": "breadth" + }, + "has_data": { + "type": "boolean", + "title": "Has Data", + "description": "whether the region has any observations" + }, + "dimensions": { + "items": { + "$ref": "#/components/schemas/BreadthDim" + }, + "type": "array", + "minItems": 1, + "title": "Dimensions", + "description": "non-empty on breadth; structured dimension counts" + }, + "window": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "the date window this breadth applies to" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "has_data", + "dimensions" + ], + "title": "CoverageBreadth", + "description": "Observation footprint expressed as structured breadth dimensions." + }, + "CoverageDimension": { + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "count": { + "type": "integer", + "title": "Count" + }, + "axis": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoleAxis" + }, + { + "type": "null" + } + ] + }, + "noun": { + "anyOf": [ + { + "$ref": "#/components/schemas/DimensionNoun" + }, + { + "type": "null" + } + ], + "description": "what the members this dimension counts are called, by the frame's flow family: provider and recipient for aid, creditor and debtor for debt. Absent for a dimension on no flow axis, such as `years`, and on a version stored without it" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "label", + "count" + ], + "title": "CoverageDimension", + "description": "One coverage dimension. `axis` is `axis_for_role(label)`: the flow axis of a dimension\nlabelled by a declared role, and `None` for `years` and unmapped roles. Validation derives\nit, so a stored body written without it carries it once loaded. `noun` is set at the mint\nfrom the version's flow family (`dfo_platform.roles.role_wording`), which the label and\naxis do not fix, so a body stored without it carries none (`year_coverage_counted`): a\n`None` noun is left out of every dump." + }, + "CoverageExact": { + "properties": { + "kind": { + "type": "string", + "const": "exact", + "title": "Kind", + "description": "coverage kind discriminator", + "default": "exact" + }, + "has_data": { + "type": "boolean", + "title": "Has Data", + "description": "whether the exact observation_count has observations in the resolved window, or in full history when window is absent" + }, + "observation_count": { + "type": "integer", + "title": "Observation Count", + "description": "exact distinct (date, facet) observation pairs for resolved stat_vars and entities in the resolved window, or full history when window is absent" + }, + "evidence": { + "type": "string", + "enum": [ + "facet_metadata", + "observed" + ], + "title": "Evidence", + "description": "provenance of observation_count. 'facet_metadata': the count comes from the graph's facet index and no observation series was delivered for this spec in this payload. 'observed': a preview series was delivered for this spec in this payload, and observation_count is still the facet-index count, now backed by fetchable data. A streaming response's `response` event ships before any observation fetch, so it always carries 'facet_metadata'; its trailing `observations` event carries the series. dfo-apis wire field outside the spec-kit contract.", + "default": "facet_metadata" + }, + "dimensions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/BreadthDim" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Dimensions", + "description": "optional per-facet breadth dimensions; the observations dimension is window-narrowed to agree with observation_count when window is set, lifetime otherwise" + }, + "window": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "the date window this count applies to" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "has_data", + "observation_count" + ], + "title": "CoverageExact", + "description": "Observation footprint with an exact count for its resolved window." + }, + "CoverageModel": { + "properties": { + "rows": { + "type": "integer", + "title": "Rows" + }, + "dimensions": { + "items": { + "$ref": "#/components/schemas/CoverageDimension" + }, + "type": "array", + "title": "Dimensions" + }, + "window": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Window" + }, + "recent_years": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/YearCoverage" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Recent Years", + "description": "three calendar years, newest first, each with the counts the coverage index held of the series the frame's run read when the version was minted. They end at the newest year a counted series held up to the year the index was built in, so a year after the frame's can hold data the frame leaves out. Stated for a latest window and for a named year at or after the year a latest window serves, and absent for an earlier named year" + }, + "elected_year": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Elected Year", + "description": "the year a latest window served when the version was minted. It is the frame's year under a latest window. A frame of a named year after it holds a year a latest window passes over" + }, + "fullest_year": { + "anyOf": [ + { + "$ref": "#/components/schemas/YearCoverage" + }, + { + "type": "null" + } + ], + "description": "the year holding the most series of the ten calendar years ending at the newest of `recent_years`, stated when it is earlier than those three and the frame's year holds under the share of its series a latest window's year must hold" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "rows", + "dimensions" + ], + "title": "CoverageModel", + "description": "A frame's row and dimension counts and its applied window.\n\n`recent_years`, `elected_year` and `fullest_year` set the frame's one year beside the\nyears around it (`datasets_api.manifest.year_coverage`). They are counted once, when\nthe version is minted, and stored with it, all three or none, so every read of the\nversion states the same ones. A `None` member is left out of every dump." + }, + "CreateComponentBody": { + "properties": { + "intent": { + "additionalProperties": true, + "type": "object", + "title": "Intent" + }, + "composition_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Composition Id" + }, + "write_token": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Write Token", + "description": "a cmw_ token this client minted for the new component: \"cmw_\" + secrets.token_urlsafe(16) or an equivalent CSPRNG, 22 url-safe base64 characters after the prefix. It becomes the component's write token and keys the create: a retry with the same write_token, intent and composition_id returns the first create's reply, and a different request with it is refused as request_invalid. Mint a new one for each create. Not allowed with composition_id \"new\"." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "intent" + ], + "title": "CreateComponentBody", + "description": "The create route's body. `write_token` is checked by `write_component`, which refuses a\nmalformed token, or one sent with `composition_id` \"new\", as `request_invalid`." + }, + "CreateReplyResponse": { + "properties": { + "component_id": { + "type": "string", + "title": "Component Id", + "description": "the newly minted component's own id" + }, + "revision": { + "type": "integer", + "title": "Revision", + "description": "the first revision a create mints, always 1" + }, + "catalog_version": { + "type": "string", + "title": "Catalog Version", + "description": "the catalogue release this revision minted under" + }, + "composition_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Composition Id", + "description": "the composition this component belongs to, null outside one" + }, + "composition_revision": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Composition Revision", + "description": "the composition's current head revision, null outside one" + }, + "changed": { + "items": { + "$ref": "#/components/schemas/ChangedFieldModel" + }, + "type": "array", + "title": "Changed", + "description": "always empty, since a create carries no prior intent to compare against" + }, + "fact_summary": { + "$ref": "#/components/schemas/FactSummaryModel", + "description": "the closed, token-capped fact summary this revision reports" + }, + "resolved_payload": { + "additionalProperties": true, + "type": "object", + "title": "Resolved Payload", + "description": "the revision's stored resolved payload, verbatim: the catalogue envelope {schema_version, catalog_version, component_id, revision, provenance, component}, validated against the catalogue release's envelope schema (dfo-spec-kit envelope.schema.json) when minted. GET /api/presentation/release serves the pinned release's envelope_schema and the component_schemas its component field $refs by $id; every payload this door serves carries that pinned catalog_version." + }, + "affordance": { + "type": "string", + "title": "Affordance", + "description": "this door's own line naming the revise and read routes for this component" + }, + "write_token": { + "type": "string", + "title": "Write Token", + "description": "the cmw_ token that grants revising this component, sent back as the x-dfo-write-token header. A server-minted token appears only in this reply; a token the create sent as write_token is echoed, and a replayed create returns it again." + }, + "composition_write_token": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Composition Write Token", + "description": "the cpw_ token that grants creating components into the composition this create started with composition_id \"new\", sent back as the x-dfo-write-token header. Present only on that create." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "component_id", + "revision", + "catalog_version", + "composition_id", + "composition_revision", + "changed", + "fact_summary", + "resolved_payload", + "affordance", + "write_token" + ], + "title": "CreateReplyResponse", + "description": "`POST /api/presentation/components`'s 201 body. It carries\n`WriteReplyResponse`'s fields plus this door's own `affordance` line\nnaming the freshly minted component's revise and read routes." + }, + "DataBuilds": { + "properties": { + "graph_generation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Graph Generation", + "description": "the graph generation token: the graph service's Cloud Run revisions last read, joined with +; null while unknown" + }, + "origin_catalogue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Origin Catalogue", + "description": "build id of the origin catalogue this request is bound to" + }, + "coverage_index": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Coverage Index", + "description": "build id of the series coverage index; null when none is loaded" + }, + "code_index": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Code Index", + "description": "content hash of the packaged code index export" + } + }, + "type": "object", + "title": "GraphDataBuilds", + "description": "The data builds this process serves, each null where it is unknown or absent." + }, + "DatasetEntry": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "string", + "title": "Label" + }, + "provenances": { + "items": { + "$ref": "#/components/schemas/ProvenanceEntry" + }, + "type": "array", + "title": "Provenances" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "its sole Provenance's description, as `details.description`; null when it has several" + }, + "license_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "License Type", + "description": "licence label every Provenance agrees on, as `license.type`; null when they disagree or one has none" + }, + "update_cadence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Update Cadence", + "description": "release cadence label every Provenance agrees on, as `license.update_cadence`; null when they disagree or one has none" + }, + "years_covered": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Years Covered", + "description": "`YYYY` or `YYYY-YYYY` span of its Provenances' observation dates, as `scope_and_units.years_covered`; null when either end is unknown" + }, + "source_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Url", + "description": "the publication's page, as `details.source_url`: the Dataset's url, else its sole Provenance's" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "provenances", + "description", + "license_type", + "update_cadence", + "years_covered", + "source_url" + ], + "title": "DatasetEntry", + "description": "A Dataset and the admitted provenances that belong to it. A provenance with\nno Dataset forms its own entry, keyed by the provenance, so `ref` and `label`\nare the provenance's and `provenances` holds that one provenance.\n\nThe card facts (`description`, `license_type`, `update_cadence`,\n`years_covered`, `source_url`) equal the same members of\n`GET /api/graph/documentation/{ref}` for the graph the loaded catalogue\nbuild read. They are null on UN System Data Commons entries." + }, + "DatasetNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "dataset", + "title": "Kind", + "default": "dataset" + }, + "dataset": { + "$ref": "#/components/schemas/SourceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "dataset" + ], + "title": "DatasetNode" + }, + "DatasetResubmitInput": { + "properties": { + "kind": { + "type": "string", + "const": "dataset_resubmit", + "title": "Kind", + "description": "discriminator for dataset-level re-resolution across every part", + "default": "dataset_resubmit" + }, + "entries": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ResubmitIdentityEntry" + }, + { + "$ref": "#/components/schemas/ResubmitCandidatesEntry" + }, + { + "$ref": "#/components/schemas/ResubmitPlaceholderEntry" + }, + { + "$ref": "#/components/schemas/ResubmitParsedEntry" + } + ], + "discriminator": { + "propertyName": "entry_kind", + "mapping": { + "candidates": "#/components/schemas/ResubmitCandidatesEntry", + "identity": "#/components/schemas/ResubmitIdentityEntry", + "parsed": "#/components/schemas/ResubmitParsedEntry", + "placeholder": "#/components/schemas/ResubmitPlaceholderEntry" + } + } + }, + "type": "array", + "maxItems": 6, + "minItems": 1, + "title": "Entries", + "description": "one entry per response part, in response part order; a single-entry request whose entry is an identity re-resolves exactly that one part" + }, + "raw_query": { + "anyOf": [ + { + "type": "string", + "maxLength": 2000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Raw Query", + "description": "original query text, for echo only; does not affect resolution" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "entries" + ], + "title": "DatasetResubmitInput", + "description": "Re-resolve every part of a multi-variable result in one request, so an\nedit to one part cannot leave the other parts' composed sentence or fold\nstale (see `envelope.make_response` / `conjoin.combine_regions`, the\ncombiner every entry kind here is routed through).\n\n`entries` supplies one entry per response part, in response part order;\neach entry edits against its own base, never a dataset-level one. There\nis no spec registry, so every entry carries its full identity and this\ndoor reads no server-side state." + }, + "DatasetVersion": { + "properties": { + "content_version": { + "type": "string", + "title": "Content Version" + }, + "base_content_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Base Content Version", + "description": "the raw version a derived version (a full groupby collapse, a party-totals cut, or both) was rendered from. Null on every other version" + }, + "rendering": { + "type": "string", + "enum": [ + "plain", + "groupby", + "without_party_totals", + "not_recorded" + ], + "title": "Rendering", + "description": "plain: a raw version, which is also what a groupby sum or a party-totals cut that left the frame unchanged is stored under. groupby: a collapse, summed by `groupby`, of the frame or of its party-totals cut when `without_party_totals` is true. without_party_totals: the frame without its party totals, unsummed. not_recorded: a derived version with no linked file recording its options" + }, + "groupby": { + "anyOf": [ + { + "$ref": "#/components/schemas/GroupbyOptions" + }, + { + "type": "null" + } + ], + "description": "the groupby a collapse was summed by, as its file's rendering records it. Null unless `rendering` is groupby" + }, + "without_party_totals": { + "type": "boolean", + "title": "Without Party Totals", + "description": "true when the derived version's frame leaves out the group totals of its open party roles, as its file's rendering records it. Absent when false", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "content_version", + "base_content_version", + "rendering", + "groupby" + ], + "title": "DatasetVersion" + }, + "DatasetVersionsPage": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "spec_id": { + "type": "string", + "title": "Spec Id" + }, + "versions": { + "items": { + "$ref": "#/components/schemas/DatasetVersion" + }, + "type": "array", + "title": "Versions", + "description": "stored versions that are not revoked, newest first" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "continues the list after this page's last version; null when complete" + }, + "complete": { + "type": "boolean", + "title": "Complete", + "description": "true when this page reaches the end of the list" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "versions", + "next_cursor", + "complete" + ], + "title": "DatasetVersionsPage" + }, + "DateRange": { + "properties": { + "start": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Start", + "description": "first served date, e.g. '2012'" + }, + "end": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "End", + "description": "last served date, e.g. '2022'" + } + }, + "additionalProperties": false, + "type": "object", + "title": "DateRange", + "description": "The first and last dates of the points an answer serves for a StatVar." + }, + "DeclinedAnswer": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1. Required on every response.", + "default": 1 + }, + "query_echo": { + "$ref": "#/components/schemas/QueryEcho", + "description": "what the response was understood to be answering" + }, + "diagnostics": { + "$ref": "#/components/schemas/Diagnostics", + "description": "run health, warnings, timing, build stamp" + }, + "kind": { + "type": "string", + "const": "declined", + "title": "Kind", + "description": "discriminator for a response to a question search does not answer", + "default": "declined" + }, + "reason": { + "type": "string", + "enum": [ + "out_of_scope", + "requires_analysis" + ], + "title": "Reason", + "description": "why search declined: 'out_of_scope' when no part of the question asks for a published statistic about a place, a population or a financial flow; 'requires_analysis' when the subject is in scope but the question asks for an argument and names no data to show" + }, + "scope": { + "$ref": "#/components/schemas/Scope-Output", + "description": "the place the question named, when it named a country" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "query_echo", + "diagnostics", + "reason", + "scope", + "kind" + ], + "title": "DeclinedAnswer", + "description": "A resolve response to a question search does not answer." + }, + "DefinitePart": { + "properties": { + "variable_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Variable Text", + "description": "the variable text this part answers, in the order asked. This part's position in Resolution.parts equals the same variable_index every SSE event keyed by variable_index uses (ShapeEvent, StepEvent, SentenceEvent). Every dataset_resubmit entry kind (identity, candidates, placeholder, and parsed through its nested ParsedPart) requires its own posted variable_text, so this field is always the posted text echoed back onto the rebuilt part, never null. Null only when the whole posted query was empty or whitespace-only (raw_text door), which refuses variable_not_resolved before extraction runs and so has no text to name." + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part was asked beside the others to be compared with them. A client resubmitting an identity, candidate set, or placeholder posts this flag on that entry to preserve the comparison. Two parts marked separate that resolve to one reading carry the same spec_id and stay two parts. False, the default, is omitted", + "default": false + }, + "warnings": { + "items": { + "$ref": "#/components/schemas/Warning" + }, + "type": "array", + "title": "Warnings", + "description": "this part's own run-health signals. A part folded into an earlier part's spec (see DefinitePart.spec) carries binding_folded alone. The merged spec's own resolved warnings live only on the first part that carries it. An unfolded part carries the warnings raised while resolving this part, plus observations_omitted on a candidates part when response_options.include_observations was set." + }, + "timing_ms": { + "anyOf": [ + { + "$ref": "#/components/schemas/Timing" + }, + { + "type": "null" + } + ], + "description": "this part's own latency breakdown, where by_step names only the phases this part ran and total sums them, leaving out the shape_* stages nested inside shape. Excludes the shared, once-per-request steps (e.g. extract), which diagnostics.timing_ms.by_step carries once for the whole request; distinct too from diagnostics.timing_ms.total, the whole request's wall-clock elapsed time." + }, + "rendered_sentence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Rendered Sentence", + "description": "a human-readable string. For candidates, a header naming how many readings there are ('3 readings.'), then each shown candidate's heading and a byline led by the source and span that set it apart; for no_data, a heading in the same claim form naming the entity, measure, and counterpart that were checked. Either ends with the text of this part's departures, in order, and a candidates part's then closes with its assumptions clause. For a definite part this stays null or omitted: the confirmation sentence (heading and byline) lives at spec.resolved.rendered_sentence, and its departures reach the envelope's composed sentence." + }, + "sentence_plan": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentence Plan", + "description": "the ordered token form of rendered_sentence, present whenever it is. For a definite part this stays null or omitted. spec.resolved.sentence_plan carries the confirmation sentence's own plan instead." + }, + "restatement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ParsedPart" + }, + { + "type": "null" + } + ], + "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + }, + "departures": { + "items": { + "$ref": "#/components/schemas/Departure" + }, + "type": "array", + "title": "Departures", + "description": "every way this part's answer differs from what its request asked, ordered by how much each changes the number: closest_match, measure_not_applied, operation_not_applied, breakdown_not_applied, entity_unavailable, year_unavailable, modelled_values, group_read_as_members, direction_discarded, direction_inferred, scope_limited. [] when the answer is what was asked. A client that renders its own sentence reads them here; each one's text also closes the sentence that carries this part (see Departure.text). A warning on the same part reports run health and stays separate" + }, + "assumptions": { + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array", + "title": "Assumptions", + "description": "every value the engine filled that the request did not ask for, in clause order. Declared defaults come first, in the order of the Spec's trace.slot_filters, then open roles, then the place scope. A declared default is a slot the request left open that its code system's or shape's declared default fixed, named by the bound code's full label. An open role is a flow role no request word asked for, read across every entity on it with data. It is either a role the role scope default filled (resolved.scope on that axis), whatever its member count, served as one series per member where the shape declares the role, or a role the heading states with no entity of its own ('from 164 providers', 'owed to all creditors'), served as the total over its members. A role the identity binds in entities or lists in open_roles, that one of the part's operations runs over ('top 5 donors'), or that the request's words asked every member of ('all donors'), is asked. The place scope is a request that named no place, read across every place with data. Every door fills assumptions. A definite part reads them from its Spec, a candidates part carries the items every list in CandidatesPart.reading_assumptions holds alike, text included, and no_data and unsupported parts carry []. A dataset_resubmit identity entry posts every slot bound, so its part states the items of the entry's assumptions echo that still hold (see ResubmitIdentityEntry.assumptions), and a candidates entry reads each reading with its candidate's echo (see ResubmitCandidate.assumptions). The sentence that carries this part closes with them as one segment='assumption' clause ('Assumed: official development assistance; every provider.'), after its departures. [] when the answer fills nothing" + }, + "status": { + "type": "string", + "const": "definite", + "title": "Status", + "description": "one answer was resolved" + }, + "spec": { + "$ref": "#/components/schemas/Spec", + "description": "the resolved Spec answering this part. Parts whose specs share a spec_id are one reading of the data, the same series, entities and years. A later part that folds into an earlier part's spec carries binding_folded. A part posted with separate: true never folds and keeps its own part, so two separate parts can carry one spec_id by request. Parts sharing a spec_id can differ in assumptions, so a client never dedupes parts by spec_id" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "status", + "spec" + ], + "title": "DefinitePart", + "description": "One unambiguous answer was resolved for this part." + }, + "DefinitionMembersRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CanonicalDefinition" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "type": "object", + "title": "DefinitionMembersRequest", + "description": "Body of `POST /api/datasets/{id}/members`. It may carry the canonical `definition` a\nsearch response gives for `id`, so the route answers before any mint registers it.\n\nA registered id needs no `definition`. A supplied one is admitted as a mint admits a\n`spec_id` sidecar: `definition.spec_id` must equal the path id, and the identity must hash\nto it. Nothing is written." + }, + "DefinitionModel": { + "properties": { + "schema_version": { + "type": "integer", + "title": "Schema Version" + }, + "spec_id": { + "type": "string", + "title": "Spec Id" + }, + "identity": { + "additionalProperties": true, + "type": "object", + "title": "Identity", + "description": "the identity-core document, shaped as search.models.identity.BaseIdentity and published at GET /api/search/schema" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "schema_version", + "spec_id", + "identity" + ], + "title": "DefinitionModel" + }, + "DefinitionOptionsRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "definition": { + "$ref": "#/components/schemas/CanonicalDefinition" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "definition" + ], + "title": "DefinitionOptionsRequest", + "description": "Body of `POST /api/datasets/{id}/options`. It carries the canonical `definition` a search\nresponse gives for `id`, so the options route answers for an id no mint has registered.\n\nThe route admits and registers the definition as a `spec_id` mint registers its sidecar.\n`definition.spec_id` must equal the path id, and the identity must hash to it." + }, + "DefinitionResponse": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "definition": { + "$ref": "#/components/schemas/CanonicalDefinition" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "schema_version", + "definition" + ], + "title": "DefinitionResponse", + "description": "The register door's response: the verified\nidentity, echoed back whole." + }, + "DefinitionText": { + "properties": { + "of": { + "$ref": "#/components/schemas/NodeRef", + "description": "the part the text defines" + }, + "text": { + "type": "string", + "title": "Text" + } + }, + "type": "object", + "required": [ + "of", + "text" + ], + "title": "GraphDefinitionText", + "description": "The graph's prose for one part of a definition." + }, + "Departure": { + "properties": { + "code": { + "type": "string", + "enum": [ + "closest_match", + "measure_not_applied", + "operation_not_applied", + "breakdown_not_applied", + "entity_unavailable", + "year_unavailable", + "modelled_values", + "group_read_as_members", + "direction_discarded", + "direction_inferred", + "scope_limited" + ], + "title": "Code", + "description": "what kind of departure this is. 'closest_match': the answer shows the nearest measure the graph holds, not the one asked; a client draws a muted 'Closest match:' lead before the heading, and on a candidates part, whose readings stand in for a measure with no data, once before the first reading. 'measure_not_applied': a named measure qualifier was not applied. 'operation_not_applied': an operation the request named (a share, a ranking) was not run, so the amounts behind it are shown. 'breakdown_not_applied': a breakdown the request named was not applied, so the total is shown. 'entity_unavailable': an entity the request named holds no values in the series the answer reads, one departure per role; for a role the request named as a group, asked is the request's words for the group and the text counts the members without values; the text names any source holding values there that Search does not read. 'year_unavailable': a named year or range falls outside the years served. 'modelled_values': the served values are modelled or estimated. 'group_read_as_members': a named group was read as its member entities; on a flow role the text names the amounts the group's published total counts that no member holds, and, for a group whose published total is not its members' sum, says the source publishes its own figure for the group. 'direction_discarded': a flow direction the request's own words named was not applied. 'direction_inferred': a place the request named without a direction is read on the one direction that holds data, which over names. 'scope_limited': a no_data answer's check covered only values the engine chose, which the request did not name; its text names only what the check covered ('This check covered only ODA.')" + }, + "binding_ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Binding Ref", + "description": "the identity binding whose edit clears this departure ('when:' for a year, 'how:' for a measure value, 'where:' or 'origin:' for a role's entities, 'unit:' for the price basis); null for a departure no binding edit clears, such as an operation the engine does not run. A client links the departure to the sentence token carrying the same binding_ref when the plan has one; a candidates or no_data plan, and a how slot the heading leaves silent, may carry no such token" + }, + "asked": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Asked", + "description": "what the request named, in its own wording; null when it named nothing" + }, + "shown": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Shown", + "description": "what the answer shows instead, as the heading states it; null when nothing" + }, + "text": { + "type": "string", + "minLength": 1, + "title": "Text", + "description": "the departure as one or two short sentences for people: 'You asked for 2030. The data ends in 2024, so this shows 1973 to 2024.' On a no_data part no text claims the part shows anything. The envelope's composed sentence carries the same text as a segment='departure' token after its part's heading and byline, and so does the rendered_sentence of a part that is not definite" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "text" + ], + "title": "Departure", + "description": "One way this part's answer differs from what its request asked, stated\nfor people in `text` and for code in `code`, `asked`, and `shown`.\n\nDepartures live on the part (`_PartBase.departures`).\n`spec.resolved.rendered_sentence` states what the answer is, and a\ndeparture states how that differs from the request that produced it." + }, + "DeploymentFacetPolicy": { + "properties": { + "policy": { + "type": "string", + "title": "Policy", + "description": "the deployment default policy's own id" + }, + "version": { + "type": "string", + "title": "Version", + "description": "the policy id's own version" + } + }, + "type": "object", + "required": [ + "policy", + "version" + ], + "title": "DeploymentFacetPolicy", + "description": "This deployment's own default-facet policy: what an unbound facet\naxis falls back to once `default_facet_policies_live` (a graph-declared,\nper-StatVar policy) is `false`. See `docs/datasets-facet-policy.md`." + }, + "DescribedProperty": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "DescribedProperty", + "description": "The open dimension a values page lists, and its label (`null` where none is known)." + }, + "DescribedValue": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + }, + "variables": { + "type": "integer", + "minimum": 0.0, + "title": "Variables" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label", + "variables" + ], + "title": "DescribedValue", + "description": "One value of an open dimension, its label (`null` where none is known), and how many of\nthe version's variables with data hold it." + }, + "DescriptionValuesPage": { + "$id": "https://schemas.dfo.one.org/datasets/v1/description-values-page.json", + "properties": { + "property": { + "$ref": "#/components/schemas/DescribedProperty" + }, + "items": { + "items": { + "$ref": "#/components/schemas/DescribedValue" + }, + "type": "array", + "title": "Items" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + }, + "complete": { + "type": "boolean", + "title": "Complete" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "property", + "items", + "next_cursor", + "complete" + ], + "title": "DescriptionValuesPage", + "description": "One page of `GET /api/datasets/{id}/{content_version}/description/values`: the values\nthe version's record holds for one open dimension, most variables first, ties ordered by\ndcid. `next_cursor` continues the list after the page's last value and is `null` on its\nlast page, where `complete` is true." + }, + "DiagnosticModel": { + "properties": { + "code": { + "type": "string", + "title": "Code" + }, + "severity": { + "type": "string", + "title": "Severity" + }, + "message": { + "type": "string", + "title": "Message" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "severity", + "message" + ], + "title": "DiagnosticModel", + "description": "One manifest diagnostic: a fact about how this response was produced that a developer\nreads and a dataset's description leaves out, since it states nothing about the data.\n`processing_level_undeclared` and `origin_catalogue_stale` are the codes it carries." + }, + "Diagnostics": { + "properties": { + "engine_build": { + "type": "string", + "title": "Engine Build", + "description": "the commit sha the image was built from, the same value the x-dfo-commit response header carries; distinct from schema_version" + }, + "trace_id": { + "type": "string", + "title": "Trace Id", + "description": "this request's trace_id, shared verbatim with every RFC 9457 problem-details body and the SSE stream's `done` event" + }, + "warnings": { + "items": { + "$ref": "#/components/schemas/Warning" + }, + "type": "array", + "title": "Warnings", + "description": "degraded-mode, applied-signal, partial-graph signals" + }, + "timing_ms": { + "anyOf": [ + { + "$ref": "#/components/schemas/Timing" + }, + { + "type": "null" + } + ], + "description": "latency breakdown" + }, + "llm_usage": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Llm Usage", + "description": "per-request LLM token counts {input_tokens, output_tokens, cached_tokens}" + }, + "timed_out": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Timed Out", + "description": "True when the pipeline's soft deadline truncated this result to a partial response; False when it ran to completion. None on the SSE response event (whose `done` event carries the authoritative flag instead) -- only resolve_async's buffered ResolveResponse populates this, since a buffered caller has no `done` event of its own to read." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "engine_build", + "trace_id", + "warnings" + ], + "title": "Diagnostics", + "description": "Run health, warnings, timing, and build stamp." + }, + "DimensionNoun": { + "properties": { + "singular": { + "type": "string", + "title": "Singular" + }, + "plural": { + "type": "string", + "title": "Plural" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "singular", + "plural" + ], + "title": "DimensionNoun", + "description": "What one member of a flow dimension is called, and several of them." + }, + "DocumentErrorEntry": { + "properties": { + "member": { + "type": "string", + "enum": [ + "transformation_log", + "version_history", + "methodology.description", + "data_notes" + ], + "title": "Member", + "description": "the wire path the document fills" + }, + "line": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Line", + "description": "1-based line in the decoded document where the problem starts, or null" + }, + "reason": { + "type": "string", + "enum": [ + "undecodable", + "empty_document", + "content_outside_section", + "unexpected_heading_level", + "heading_not_plain_text", + "empty_heading", + "empty_section", + "disallowed_block", + "raw_html", + "hard_break", + "invalid_release_heading", + "missing_release_title", + "release_dates_not_descending", + "duplicate_release_date", + "unknown_change_kind", + "duplicate_change_kind", + "not_single_bullet_list", + "list_item_not_single_paragraph", + "document_too_large", + "nesting_too_deep", + "conflicting_values" + ], + "title": "Reason", + "description": "the template rule the document breaks" + } + }, + "type": "object", + "required": [ + "member", + "line", + "reason" + ], + "title": "DocumentErrorEntry", + "description": "A Markdown document the source carries that this door could not serve.\nThe member it fills is empty and named in `gaps`." + }, + "DownloadFacts": { + "properties": { + "rows": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Rows", + "description": "the rows the definition's series serve: one per series and date, totals included. A long-layout CSV or XLSX keeps the rows where a role the Datasets options document lists in long_layout_totals holds a total out of its main table, so that table can hold fewer. Null when it could understate: a served member the coverage artifact does not hold" + }, + "rows_exact": { + "type": "boolean", + "title": "Rows Exact", + "description": "true when rows equals the mint's coverage.rows. Under a unit request rows counts only the rows the conversion keeps: at constant prices each entity's rows in the years its deflator holds, none when it lacks the base year. False when rows is an upper bound: a unit request whose conversion cannot be read from the loaded conversion tables (none loaded, served facets under several recipes or in a unit that is no currency, or no single deflator role), or a series whose facets carry no complete date list. False when rows is null" + }, + "series": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Series", + "description": "the series in the file: distinct (StatVar, entities) with a point, the mint's series_count. Null when rows is null" + }, + "window": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "the first and last years of the file's points; null when rows is null" + }, + "licence": { + "anyOf": [ + { + "$ref": "#/components/schemas/DownloadLicence" + }, + { + "type": "null" + } + ], + "description": "the licence of the one provenance the answer serves, from the origin catalogue; null when it serves several, or the catalogue names no single licence for it" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "rows_exact" + ], + "title": "DownloadFacts", + "description": "What a Datasets mint of this Spec's definition writes in its default file (no\ngrouping), known before the first download. Rows and series count what the answer's\nread plan serves over the identity's whole window: every year for no window, the\nrange for a range, and each series' latest year for `latest`." + }, + "DownloadLicence": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "the licence's name: the `name` of the licenseType node the provenances of the provenance's source-index entry agree on" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "label" + ], + "title": "DownloadLicence", + "description": "The licence of the provenance a Spec's file cites. Its terms page is on the\nprovenance's source page." + }, + "EnrichmentCoverageCountsModel": { + "properties": { + "entities": { + "type": "integer", + "title": "Entities" + }, + "covered": { + "type": "integer", + "title": "Covered" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "entities", + "covered" + ], + "title": "EnrichmentCoverageCountsModel" + }, + "EnrichmentOptionModel": { + "properties": { + "column": { + "type": "string", + "title": "Column" + }, + "field": { + "type": "string", + "title": "Field" + }, + "token": { + "type": "string", + "title": "Token" + }, + "state": { + "type": "string", + "title": "State" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reason" + }, + "coverage": { + "$ref": "#/components/schemas/EnrichmentCoverageCountsModel" + }, + "missing": { + "items": { + "$ref": "#/components/schemas/MissingEntityModel" + }, + "type": "array", + "title": "Missing" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "column", + "field", + "token", + "state", + "coverage" + ], + "title": "EnrichmentOptionModel", + "description": "One `(entity column, field)` enrichment this deployment enables,\nwith `token` naming the exact `{column}_{field}` the `columns` option\naccepts to request it." + }, + "EntityCounts": { + "properties": { + "parties": { + "type": "integer", + "title": "Parties", + "description": "entities with figures of their own" + }, + "totals": { + "type": "integer", + "title": "Totals", + "description": "entities that hold other entities' figures" + }, + "residual": { + "type": "integer", + "title": "Residual", + "description": "entities holding figures no other entity does" + }, + "unclassified": { + "type": "integer", + "title": "Unclassified", + "description": "entities the code index does not list" + } + }, + "type": "object", + "required": [ + "parties", + "totals", + "residual", + "unclassified" + ], + "title": "GraphAvailabilityEntityCounts", + "description": "The distinct entities in one role, split by their kind in the code index." + }, + "EntityCoverage": { + "properties": { + "entity": { + "$ref": "#/components/schemas/StepRef" + }, + "periods": { + "type": "integer", + "minimum": 0.0, + "title": "Periods" + }, + "of": { + "type": "integer", + "minimum": 0.0, + "title": "Of" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "entity", + "periods", + "of" + ], + "title": "EntityCoverage", + "description": "How many of the window's periods one ranked entity holds." + }, + "EntityGroup": { + "properties": { + "ref": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Ref", + "description": "the group's own graph node, when the graph holds one; null otherwise" + }, + "label": { + "type": "string", + "maxLength": 120, + "minLength": 1, + "title": "Label", + "description": "the group's name as the request gave it, plain text" + }, + "entity_type": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Entity Type", + "description": "the graph type of the group's own node, e.g. Continent, UNGeoRegion, ContinentalUnion; null when the graph holds no node for the group" + }, + "total": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Total", + "description": "the party the dataset publishes as the group's total, which the role binds in place of the members (DACAfrica for Africa); null when the role binds the members" + }, + "group_id": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Group Id", + "description": "the membership registry's id for a group the graph holds no node for, e.g. groups/OECD.DAC.Region.Asia; null when ref is set or the group is no registry group" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "label" + ], + "title": "EntityGroup", + "description": "A named group whose members fill one entity role, as the request named it\n(\"EU member states\"). The members themselves are the role's dcids in\n`BaseIdentity.entities`. This records only that they were asked for as one\ngroup, so the heading can say \"the 27 EU member states\" after any edit that\nkeeps the role's members. A group the graph holds no node for, read from the\nmembership registry (\"Asia (DAC)\"), names the registry's id for it in\n`group_id`, so a resubmit restores it and the total its dataset publishes for it.\nA group whose `ref` is a continent or subregion\nthat the membership policy holds or omits (`MembershipPolicy.holds_region`)\nreads as its countries (\"the 54 countries in Africa\"), whatever its graph\ntype. `entity_type` is informational, and the reading keys on `ref`. When\nthe role binds the total its dataset publishes\nfor the group (\"Africa (DAC)\") in place of the members, `total` names that\nparty and the role's one dcid is it. A Spec serves its groups on\n`ResolvedSpec.entity_groups`, and a resubmit posts them beside the identity\n(`ResubmitIdentityEntry.entity_groups`, `ResubmitCandidate.entity_groups`)." + }, + "EntityOptions": { + "properties": { + "entity_ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Entity Ref", + "description": "dcid of the currently-bound directional entity; joins to an entry in SentenceToken.entity_refs. None means this role axis is open -- no entity is bound on it, and `options` is this axis's own candidate member set rather than a set the current binding could be swapped among. An open role axis omits this key entirely on both the buffered body and the SSE entity_options event, rather than emitting null -- the opposite of SlotOption.coverage's own explicit-null convention on that same SSE channel" + }, + "role": { + "$ref": "#/components/schemas/RoleAxis", + "description": "the flow axis these candidates apply to; present even when entity_ref is omitted so a selected candidate can be posted under the same identity.entities role" + }, + "options": { + "items": { + "$ref": "#/components/schemas/SlotOption" + }, + "type": "array", + "title": "Options", + "description": "candidate entities, reusing SlotOption for shape parity with slot_options" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "true when options is capped or deliberately count-only, so it is not the complete known candidate set; false when every known candidate is listed" + }, + "source": { + "type": "string", + "enum": [ + "observed", + "seed" + ], + "title": "Source", + "description": "'seed' for a hand-curated candidate set; 'observed' for candidates already confirmed while resolving this flow axis" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "role", + "options", + "truncated", + "source" + ], + "title": "EntityOptions", + "description": "Candidates for one directional entity axis.\n\nParallel to SlotOptions, but for a directional *entity* (an observation\nendpoint) rather than a constraint-property value. A role-bearing flow may\nexpose either its origin or destination axis here when that axis was left\nopen. The entry's ``role`` is the routing key a client uses to promote a\nselected candidate into ``identity.entities`` on a dataset_resubmit entry." + }, + "EntityRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "string", + "title": "Label" + }, + "kind": { + "anyOf": [ + { + "type": "string", + "enum": [ + "country", + "continent", + "subregion", + "continental_union", + "place_other", + "aggregate", + "organisation", + "group", + "stat_var", + "code_system", + "code", + "unit", + "source", + "dataset", + "provenance", + "other" + ] + }, + { + "type": "null" + } + ], + "title": "Kind" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "kind" + ], + "title": "GraphResolveEntity", + "description": "A reference with its kind. `kind` is `null` only for a `not_held` entity, which the\ngraph holds no node to classify." + }, + "Exclusion": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "reason": { + "type": "string", + "enum": [ + "superseded_by_dfo", + "superseded_by_un_system" + ], + "title": "Reason", + "description": "superseded_by_dfo: an upstream copy of a dataset DFO imports. superseded_by_un_system: a UN System Data Commons agency's series replace it" + } + }, + "type": "object", + "required": [ + "ref", + "reason" + ], + "title": "Exclusion", + "description": "A provenance a base source holds that this deployment does not admit, because\nanother Data Commons supersedes it." + }, + "Expansion": { + "properties": { + "added": { + "items": { + "$ref": "#/components/schemas/GraphRef" + }, + "type": "array", + "minItems": 1, + "title": "Added", + "description": "descendant codes admitted beyond the slot's own bound value(s), in the code index's descendant-walk order. Never empty -- a slot whose expansion added nothing carries no Expansion at all (Slot.expansion is None), rather than one with added=[]" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "added" + ], + "title": "Expansion", + "description": "Codes a hierarchical value/set binding resolved to beyond its own bound\nvalue(s): the descendant codes admitted by walking the code index's\n`specializationOf` closure for a dimension the index declares\n`hierarchical` (code_index.query.CodeIndex.descendants).\n\nAdditive only. Never a substitute for `binding`, and never fed into spec\nidentity -- `BindingValue`/`BindingSet` are the sole identity-bearing wire\nform (see Slot.expansion's own docstring for why: identity is minted from\n`BindingSet.values`, built from the query's own drafted values, before\nresolution ever widens them). `added` never repeats a dcid already in the\nbinding's own value(s); it holds only what expansion contributed on top." + }, + "FacetItem": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "null", + "title": "Label" + }, + "source": { + "$ref": "#/components/schemas/AvailabilitySource" + }, + "unit": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ] + }, + "measurement_method": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ] + }, + "observation_period": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Observation Period" + }, + "scaling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Scaling" + }, + "first_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Year" + }, + "last_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Year" + }, + "observations": { + "type": "integer", + "title": "Observations" + }, + "places": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Places", + "description": "null for a role-bearing variable" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "source", + "unit", + "measurement_method", + "observation_period", + "scaling", + "first_year", + "last_year", + "observations", + "places" + ], + "title": "GraphFacetItem", + "description": "One facet of a variable, as the `facets` list relation serves it. `ref` is the facet id,\nwhich hashes the facet's metadata." + }, + "FacetNationalCurrencyBinding": { + "properties": { + "national_currency": { + "$ref": "#/components/schemas/UnitCurrencyRole" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "national_currency" + ], + "title": "FacetNationalCurrencyBinding", + "description": "The unit axis bound to each entity's own currency: at each entity `role`\nbinds, the facets whose unit is the one currency the graph's\n`nationalCurrencyOf` names for it, served as published and never converted.\nThe conversion request naming the same role (`UnitCurrencyRole`) converts\neach row into that currency instead." + }, + "FacetOptions": { + "properties": { + "axis": { + "type": "string", + "title": "Axis", + "description": "the facet axis this option set belongs to (see FacetAxis)" + }, + "options": { + "items": { + "$ref": "#/components/schemas/SlotOption" + }, + "type": "array", + "title": "Options", + "description": "candidate values seen on the resolved candidates' own unfiltered observation facets, ranked by in-window observation-point count descending then ref ascending; a dcid the graph can't label falls back to the dcid itself as its own label rather than being dropped -- every value here already came off a confirmed observation facet, unlike a curated seed candidate. On the measurementMethod and unit axes, an option with no value.ref stands for the facets that declare no value on the axis, as Data Commons omits the member; it is listed only beside a declared value, ranks last among equal counts, and is pinned by posting identity.facets. as {state: 'value', ref: null}" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "true when options is bounded by SEARCH_MAX_OPTIONS rather than the full distinct set observed" + }, + "source": { + "type": "string", + "enum": [ + "observed", + "seed" + ], + "title": "Source", + "description": "always 'observed' -- a facet axis has no curated seed taxonomy" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "axis", + "options", + "truncated", + "source" + ], + "title": "FacetOptions", + "description": "The candidate set one facet axis (see ResolvedFacet) was chosen from:\nevery distinct value seen on the resolved candidates' own observation\nfacets, so a client can offer \"what else could I ask for\" alongside the\nserved answer.\n\nParallel to SlotOptions/EntityOptions, reusing SlotOption for shape\nparity. Unlike either, source is always \"observed\" -- a facet axis has\nno curated seed taxonomy -- and no option here ever carries a populated\nSlotOption.coverage: there is no separate confirm step for a facet\noption, the observed count already ranks the list." + }, + "FacetRefBinding": { + "properties": { + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ref" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "FacetRefBinding", + "description": "A facet axis bound to a specific ref. Every axis accepts this form;\nthe unit axis alone also accepts `FacetUnitRequestBinding`, the\nconversion-request form (`currency`/`prices`/`base_year`), and\n`FacetNationalCurrencyBinding`. A null `ref` binds the facets that declare\nno value on the axis, and only `NULL_REF_FACET_AXES` accept it." + }, + "FactSummaryModel": { + "properties": { + "changed": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Changed", + "description": "the patch's own changed field names, empty for a create or a no-op write" + }, + "series": { + "items": { + "$ref": "#/components/schemas/FactSummarySeriesEntry" + }, + "type": "array", + "title": "Series", + "description": "every visible series this revision resolves, capped" + }, + "series_cut": { + "type": "integer", + "title": "Series Cut", + "description": "how many series the series cap and the token cap together dropped from this summary" + }, + "window": { + "anyOf": [ + { + "$ref": "#/components/schemas/WindowModel" + }, + { + "type": "null" + } + ], + "description": "this component's own [start, end] period window, null where its type defines none" + }, + "unit": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/ConvertedUnitModel" + }, + { + "$ref": "#/components/schemas/ComposedUnitModel" + }, + { + "type": "null" + } + ], + "title": "Unit", + "description": "this component's own unit, the value its resolved payload carries: a unit's graph name (its ref when the graph has none), a converted unit, or a composed unit. A line_chart or bar_chart reports its first series' unit and a table the unit every row shares. Null where the type defines none, the rows declare none, or a table's rows differ." + }, + "change": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Change", + "description": "the stat_card's derived comparison between its two basis periods, null for every other member and for a stat_card whose intent carries no change" + }, + "source_refs": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Source Refs", + "description": "every distinct raw provenance ref a source_card's frame carries. It is null for every other member." + }, + "defaults": { + "items": { + "$ref": "#/components/schemas/AppliedDefaultModel" + }, + "type": "array", + "title": "Defaults", + "description": "the choices this component made where its intent left one open, empty when it made none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "changed", + "series", + "series_cut", + "window", + "unit", + "change", + "source_refs", + "defaults" + ], + "title": "FactSummaryModel", + "description": "The closed, token-capped fact summary a revision reports." + }, + "FactSummarySeriesEntry": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id", + "description": "this series' own id, null when none could be assigned" + }, + "label": { + "type": "string", + "title": "Label", + "description": "this series' own display label" + }, + "coordinates": { + "additionalProperties": true, + "type": "object", + "title": "Coordinates", + "description": "this series' own dimension coordinates" + }, + "point_count": { + "type": "integer", + "title": "Point Count", + "description": "how many of this series' points carry an observed value" + }, + "first_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Value", + "description": "this series' earliest observed value, formatted, null when it has none" + }, + "last_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Value", + "description": "this series' latest observed value, formatted, null when it has none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "label", + "coordinates", + "point_count", + "first_value", + "last_value" + ], + "title": "FactSummarySeriesEntry", + "description": "One `fact_summary.series[]` entry. It reports one visible series'\nidentity, point count and formatted boundary values." + }, + "FlowAccount": { + "type": "string", + "const": "provider" + }, + "FormatOptionModel": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "state": { + "type": "string", + "title": "State" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reason" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "name", + "state" + ], + "title": "FormatOptionModel" + }, + "FrameCurrent": { + "properties": { + "status": { + "type": "string", + "const": "current", + "title": "Status", + "default": "current" + }, + "frame": { + "$ref": "#/components/schemas/FramePair", + "description": "the named frame, which is its rendering's current one" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "frame" + ], + "title": "FrameCurrent" + }, + "FrameDimensionMatch": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "this dimension's own column name" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Values", + "description": "this dimension's own values matching the query" + }, + "matched_count": { + "type": "integer", + "title": "Matched Count", + "description": "how many of this dimension's values matched the query" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "name", + "values", + "matched_count" + ], + "title": "FrameDimensionMatch", + "description": "One dimension of a frame's query-filtered view (`?query=` given,\n`dimension` absent). Its values are filtered to those matching the\nquery." + }, + "FrameDimensionSummary": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "this dimension's own column name" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Values", + "description": "this dimension's own values, capped" + }, + "total_count": { + "type": "integer", + "title": "Total Count", + "description": "this dimension's own value count before capping" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "whether this dimension's values list was capped" + }, + "plural": { + "type": "boolean", + "title": "Plural", + "description": "whether this frame's series hold more than one value of this dimension, a null counting as one; the estimates continuing a series hold its method, so they leave measurementMethod not plural" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "name", + "values", + "total_count", + "truncated", + "plural" + ], + "title": "FrameDimensionSummary", + "description": "One dimension of a frame's structural view (`GET .../frames/{...}`\nwith neither `dimension` nor `query` given). Its values are capped to\nthe per-dimension listing cap." + }, + "FrameDimensionValuesResponse": { + "properties": { + "dimension": { + "type": "string", + "title": "Dimension", + "description": "the dimension this response reports" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Values", + "description": "every value this dimension carries, uncapped, or only the values matching `query` when it is given" + }, + "total_count": { + "type": "integer", + "title": "Total Count", + "description": "how many values this dimension carries, or how many match `query` when it is given" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "dimension", + "values", + "total_count" + ], + "title": "FrameDimensionValuesResponse", + "description": "`GET /api/presentation/frames/{spec_id}/{content_version}?dimension=`'s\nbody. It reports one dimension's full value list, read fresh and\nuncapped. Given alongside `?query=`, `values` and `total_count`\ndescribe only the values matching the query." + }, + "FrameFilteredViewResponse": { + "properties": { + "dimensions": { + "items": { + "$ref": "#/components/schemas/FrameDimensionMatch" + }, + "type": "array", + "title": "Dimensions", + "description": "every dimension this frame declares, filtered" + }, + "period_grain": { + "type": "string", + "title": "Period Grain", + "description": "this frame's own period grain" + }, + "coverage": { + "anyOf": [ + { + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + { + "type": "null" + } + ], + "title": "Coverage", + "description": "this frame's own [start, end] period coverage, null if it has none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "dimensions", + "period_grain", + "coverage" + ], + "title": "FrameFilteredViewResponse", + "description": "`GET /api/presentation/frames/{spec_id}/{content_version}?query=`'s\nbody (`dimension` absent). It reports every dimension this frame\ndeclares, filtered to values matching the query, counts kept." + }, + "FrameMoved": { + "properties": { + "status": { + "type": "string", + "const": "moved", + "title": "Status", + "default": "moved" + }, + "frame": { + "$ref": "#/components/schemas/FramePair", + "description": "the current frame of the named frame's rendering" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "frame" + ], + "title": "FrameMoved" + }, + "FramePair": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id" + }, + "content_version": { + "type": "string", + "title": "Content Version" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version" + ], + "title": "FramePair" + }, + "FramePending": { + "properties": { + "status": { + "type": "string", + "const": "pending", + "title": "Status", + "default": "pending" + }, + "operation_id": { + "type": "string", + "title": "Operation Id", + "description": "the queued rebuild, pollable on the operations route" + }, + "retry_after_s": { + "type": "number", + "title": "Retry After S", + "description": "seconds to wait before calling again" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "operation_id", + "retry_after_s" + ], + "title": "FramePending" + }, + "FrameStructuralViewResponse": { + "properties": { + "dimensions": { + "items": { + "$ref": "#/components/schemas/FrameDimensionSummary" + }, + "type": "array", + "title": "Dimensions", + "description": "every dimension this frame declares" + }, + "period_grain": { + "type": "string", + "title": "Period Grain", + "description": "this frame's own period grain" + }, + "coverage": { + "anyOf": [ + { + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + { + "type": "null" + } + ], + "title": "Coverage", + "description": "this frame's own [start, end] period coverage, null if it has none" + }, + "series_count": { + "type": "integer", + "title": "Series Count", + "description": "how many distinct series this frame resolves" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "dimensions", + "period_grain", + "coverage", + "series_count" + ], + "title": "FrameStructuralViewResponse", + "description": "`GET /api/presentation/frames/{spec_id}/{content_version}`'s body\nwith neither `dimension` nor `query` given. It reports the frame's own\nstructural view, every dimension capped." + }, + "Freshness": { + "properties": { + "release_frequency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Release Frequency" + }, + "release_frequency_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Release Frequency Label" + }, + "refresh_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Refresh Type" + } + }, + "type": "object", + "required": [ + "release_frequency", + "release_frequency_label", + "refresh_type" + ], + "title": "Freshness", + "description": "A source's own refresh cadence, read from DCP provenance arcs that imports populate\nunevenly: `dc/base/WHO_COVID19` carries both `sourceReleaseFrequency` and\n`automaticRefreshType`, `dc/base/BIS_CentralBankPolicyRate` only the second, and\n`dc/base/WHO_GHO` neither. Nullability is the contract.\n\n`release_frequency` is the raw `sourceReleaseFrequency` ISO 8601 duration (`P1M`);\n`release_frequency_label` is `materialise.cadence.cadence_label`'s display label for it\n(`Monthly`), or the raw token when that module does not recognise it.\n\n`refresh_type` is `automaticRefreshType`'s value: how this deployment refreshes the\nsource, such as `GCPCloudRunAutomaticRefresh`, or the sentinel `NoAutomaticRefresh`." + }, + "GraphRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the graph identifier" + }, + "label": { + "type": "string", + "title": "Label", + "description": "plain-language display name, read from the graph" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "GraphRef", + "description": "Every graph identifier in the contract." + }, + "GraphSchema": { + "properties": { + "schemas": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object", + "title": "Schemas", + "description": "JSON Schema of each served request and response body, keyed by name" + }, + "capabilities": { + "type": "string", + "title": "Capabilities", + "description": "path of this surface's capability document" + } + }, + "type": "object", + "required": [ + "schemas", + "capabilities" + ], + "title": "GraphSchema", + "description": "The full `GET /api/graph/schema` document." + }, + "GroupNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "group", + "title": "Kind", + "default": "group" + }, + "group": { + "$ref": "#/components/schemas/MembershipBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "group" + ], + "title": "GroupNode" + }, + "GroupbyOptions": { + "properties": { + "by": { + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array", + "minItems": 1, + "uniqueItems": true, + "title": "By" + }, + "op": { + "type": "string", + "const": "sum", + "title": "Op" + }, + "levels": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer", + "maximum": 99.0, + "minimum": 0.0 + }, + "type": "object", + "minProperties": 1 + }, + { + "type": "null" + } + ], + "title": "Levels", + "description": "code system -> depth: roll each kept code up to its ancestor at that depth (0 = root codes); a code shallower than the depth stays as itself, under its own label" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "by", + "op" + ], + "title": "GroupbyOptions", + "description": "`options.groupby`: a safe roll-up that keeps exactly the axes named\nin `by`, one row per distinct combination of their values. Every other\ngraph-declared summable axis a frame decoded is summed away, `stat_var`\nincluded. `by` names what a caller wants to see, the opposite of\n`groupby_sum`'s own \"collapse this axis\" reading. `sum` is the only op\nthis closed reshape list allows.\n\nEvery `by` entry names a code system some deployment declaration marks\nsummable, a role/entity column (`materialise.roles.KNOWN_ROLE_NAMES`),\n`stat_var`, or a column every frame carries regardless of shape; any\nother name refuses `rollup_not_summable`\n(`datasets_api.groupby.refuse_unknown_by_axes`). A declared axis this\nframe's StatVars do not decode is left out of the collapse set\n(`datasets_api.groupby.collapse_axes`).\n\n`levels` rolls a kept hierarchical axis up to one depth of its parent\nchain before the sum: each code becomes its ancestor at that depth, and\ndepth 0 is the root codes. Each key must also appear in `by`, and must\nbe one of the capabilities document's `groupby_level_axes`\n(`datasets_api.render.check_options_supported`)." + }, + "GroupbyOptionsModel": { + "properties": { + "state": { + "type": "string", + "title": "State" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reason" + }, + "axes": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Axes" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "state" + ], + "title": "GroupbyOptionsModel", + "description": "`axes` names the axes a `groupby.by` request may keep: every other\ndeclared-summable axis a frame decoded is collapsed into it. Empty\nwhile `state` is `unavailable`." + }, + "Headline": { + "properties": { + "year": { + "type": "integer", + "title": "Year", + "description": "the year the counts are for. For a latest window it is the elected year: of the three calendar years ending at the newest year a variable's series hold, at or before the year the coverage artifact was built, the newest one that at least half as many series hold as the fullest of the three, and with several variables the newest year any of them elects. For a named window it is the latest year any served series has an observation inside the window" + }, + "year_named": { + "type": "boolean", + "title": "Year Named", + "description": "whether the request itself named a year or a range of years, rather than defaulting to one, independent of whether those years include the shown `year`" + }, + "named_window": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "the year or years the request named: equal bounds for one year, an absent bound for an open range; null when no year was named. The counts are for `year` alone, whatever this window holds" + }, + "observations": { + "type": "integer", + "title": "Observations", + "description": "exact observation count across served series in year" + }, + "series": { + "type": "integer", + "title": "Series", + "description": "exact series count with an observation in year" + }, + "role_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object", + "title": "Role Counts", + "description": "distinct dcid count per role active in year, keyed by the graph's own role property dcid (e.g. financingProvider, financingRecipient) -- never by a donor/recipient label, so the wire stays aligned with Data Commons' own names" + }, + "recent_years": { + "items": { + "$ref": "#/components/schemas/HeadlineYear" + }, + "type": "array", + "minItems": 1, + "title": "Recent Years", + "description": "the counts for three calendar years, newest first, so a newest year with far fewer series than the years before it reads as incomplete. For a latest window they are raw counts over every series the answer holds, ending at the newest year any of them holds at or before the year the coverage artifact was built, or at the newest year any holds when none holds a year that early; `year` is one of the three: the newest year a variable heads, which is the year it elected or, for a variable that elects none, such as one of monthly data, its newest year at or before the build year. When no variable holds a year that early, each heads its newest year. `observations`, `series` and `role_counts` count only the variables heading it. For a named window they end at `year`, the first entry repeats `observations`, `series` and `role_counts`, and the earlier years count whether or not `named_window` reaches them. A year with no data is kept with zero counts. The list stops at the first year the coverage artifact represents, so it can hold fewer than three entries" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "year", + "year_named", + "observations", + "series", + "role_counts", + "recent_years" + ], + "title": "Headline", + "description": "The exact, one-year summary of a role-bearing answer's own served\npopulation: the year `CoverageIndex.headline` (series_coverage) heads the\nanswer with, whether that year was the one the question named, the exact\nobservation and series count in that year alone, and how many distinct dcids\neach role carries in it. `series_coverage.index.Headline`'s own docstring is\nthe source of truth for why `observations` and `series` are always equal\nunder this schema.\n\nThe counts are those of the year the answer's read plan serves. Under a `latest`\nwindow that is the year its variables elect (`CoverageIndex.elected_years`), which\nthe preview and a mint of the Spec serve too. Under a named window it is the latest\nyear with data in that window, so a question naming 2015 to 2020 counts the latest\nof those years with data. `named_window` carries the years it named.\n\nAttached to every role-bearing answer (named-destination confirmed and\nopen-axis discovered alike), never to a non-role-bearing one: coverage\nonly exists for role-bearing series (series_coverage.schema's own scope\nnote), and computing this is a free in-memory bitmask operation, not a\nnetwork read, so there is no population-size reason to withhold it from\na narrow answer the way the per-series preview stays capped at 20\nregardless of how broad the answer is." + }, + "HeadlineYear": { + "properties": { + "year": { + "type": "integer", + "title": "Year", + "description": "the calendar year these counts are for" + }, + "observations": { + "type": "integer", + "title": "Observations", + "description": "exact observation count across served series in year" + }, + "series": { + "type": "integer", + "title": "Series", + "description": "exact series count with an observation in year" + }, + "role_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object", + "title": "Role Counts", + "description": "distinct dcid count per role active in year, keyed by the graph's own role property dcid; a role with no dcid in the year is absent" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "year", + "observations", + "series", + "role_counts" + ], + "title": "HeadlineYear", + "description": "The exact counts for one calendar year of a role-bearing answer's served\npopulation: observations and series with an observation in it, and how many\ndistinct dcids each role carries. A year with no data counts zero." + }, + "HealthResponse": { + "properties": { + "status": { + "type": "string", + "const": "ok", + "title": "Status", + "description": "always \"ok\" for a 200 response" + }, + "build": { + "type": "string", + "title": "Build", + "description": "the commit sha the image was built from, the same value the x-dfo-commit response header carries, \"unknown\" on a checkout run with no DFO_BUILD_COMMIT set" + }, + "capability_version": { + "type": "string", + "title": "Capability Version", + "description": "this surface's own capability_version token" + } + }, + "type": "object", + "required": [ + "status", + "build", + "capability_version" + ], + "title": "HealthResponse", + "description": "`GET /healthz`'s own response body, shared across every surface." + }, + "IdentityBindingExact": { + "properties": { + "state": { + "type": "string", + "const": "exact", + "title": "State", + "default": "exact" + }, + "ref": { + "type": "string", + "maxLength": 1024, + "title": "Ref", + "description": "the bound dcid, denoting that code alone" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "IdentityBindingExact", + "description": "A single bound dcid, denoting that code alone -- never its subtree,\neven where the code is a hierarchical (non-leaf) code (see\n`docs/identity-v1.md` in `spec-kit` for the denotation rule: `value`\ndenotes a hierarchical code's whole subtree, `exact` denotes the code\nalone). Slot-only: `_build_facet_binding` refuses `exact` on a facet.\nNo engine `Binding` arm maps onto this state and no minting site\nproduces it -- see `IdentityBinding`'s own docstring." + }, + "IdentityBindingSet": { + "properties": { + "state": { + "type": "string", + "const": "set", + "title": "State", + "default": "set" + }, + "refs": { + "items": { + "type": "string", + "maxLength": 1024 + }, + "type": "array", + "maxItems": 1024, + "minItems": 1, + "title": "Refs", + "description": "the bound dcids (dfo_spec_kit sorts and de-duplicates)" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "refs" + ], + "title": "IdentityBindingSet", + "description": "A bound dcid set, in the identity core's own binding wire shape." + }, + "IdentityBindingUnbound": { + "properties": { + "state": { + "type": "string", + "const": "unbound", + "title": "State", + "default": "unbound" + } + }, + "additionalProperties": false, + "type": "object", + "title": "IdentityBindingUnbound", + "description": "An unbound slot/facet binding." + }, + "IdentityBindingValue": { + "properties": { + "state": { + "type": "string", + "const": "value", + "title": "State", + "default": "value" + }, + "ref": { + "type": "string", + "maxLength": 1024, + "title": "Ref", + "description": "the bound dcid" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "IdentityBindingValue", + "description": "A single bound dcid, in the identity core's own binding wire shape." + }, + "IdentityCurrencyRole": { + "properties": { + "role": { + "type": "string", + "enum": [ + "observationAbout", + "origin", + "destination" + ], + "title": "Role", + "description": "the entity role whose bound entity's currency this request means" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "role" + ], + "title": "IdentityCurrencyRole", + "description": "The role-shaped form of a unit request's `currency`: the currency of\nthe entity bound to this spec role, resolved per row. Field-for-field mirror\nof the identity core's own `_CURRENCY_ROLE_KEYS`/`_CURRENCY_ROLES`\n(`dfo_spec_kit.identity`'s `_build_currency`, the object arm)." + }, + "IdentityFacetValueAbsent": { + "properties": { + "state": { + "type": "string", + "const": "value", + "title": "State", + "default": "value" + }, + "ref": { + "type": "null", + "title": "Ref", + "description": "null: the facet declares no value on this axis" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "IdentityFacetValueAbsent", + "description": "A measurementMethod or unit facet bound to no declared value:\n`{\"state\": \"value\", \"ref\": null}` asks for the facets that declare no value\non the axis, the ones Data Commons serves without that member. An unbound\naxis admits every facet; this binding admits only those without a value.\nMirrors the identity core's null facet ref (`docs/identity-v1.md` in\n`spec-kit`). `ref` serialises as `null` even under `exclude_none`, since\nthe identity core refuses a value binding with neither `ref` nor `request`." + }, + "IdentityFacetValueRequest": { + "properties": { + "state": { + "type": "string", + "const": "value", + "title": "State", + "default": "value" + }, + "request": { + "$ref": "#/components/schemas/IdentityUnitRequest", + "description": "the completed unit-conversion request" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "request" + ], + "title": "IdentityFacetValueRequest", + "description": "A unit-axis facet bound via the request form: \"serve whatever facet\nhonours this completed currency/prices/base_year request\" rather than a\nliteral graph ref. `state` reuses the value-state spelling since this is\nstill a single-valued binding to the identity core -- `request` is what\ndistinguishes it from `IdentityBindingValue`'s `ref` form (see\n`_facet_binding_tag`, this union's discriminator)." + }, + "IdentityShapeDenominatorRef": { + "properties": { + "ref": { + "type": "string", + "maxLength": 1024, + "title": "Ref", + "description": "the resolved denominator StatVar's dcid" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "IdentityShapeDenominatorRef", + "description": "The described arm's `measurement_denominator`, resolved to a dcid." + }, + "IdentityShapeDenominatorUnresolved": { + "properties": { + "unresolved": { + "type": "boolean", + "const": true, + "title": "Unresolved", + "description": "always the literal true -- the arc exists but names no dcid", + "default": true + } + }, + "additionalProperties": false, + "type": "object", + "title": "IdentityShapeDenominatorUnresolved", + "description": "The described arm's `measurement_denominator`, present on the graph but\nnever resolved to a dcid (e.g. a dcid-less ProvisionalNode) -- distinct\nfrom the member being absent entirely, which means no denominator arc\nexists at all." + }, + "IdentityShapePin": { + "properties": { + "kind": { + "type": "string", + "const": "stat_var", + "title": "Kind", + "default": "stat_var" + }, + "id": { + "type": "string", + "maxLength": 1024, + "title": "Id", + "description": "the pinned StatVar's dcid" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id" + ], + "title": "IdentityShapePin", + "description": "The pinned-ask arm of the identity core's `shape` union\n(`kind: \"stat_var\"`): a single StatVar dcid, minted by Datasets'\nstatvar_set. See `BaseIdentity`'s cross-member validator -- when this arm\nis chosen, `slots` must be empty." + }, + "IdentityShapeSchema": { + "properties": { + "kind": { + "type": "string", + "const": "statvar_schema", + "title": "Kind", + "default": "statvar_schema" + }, + "population_type": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Population Type", + "description": "the graph populationType dcid" + }, + "measured_property": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Measured Property", + "description": "the graph measuredProperty dcid" + }, + "stat_type": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Stat Type", + "description": "the graph statType dcid, e.g. measuredValue" + }, + "measurement_qualifier": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Measurement Qualifier", + "description": "the graph measurementQualifier dcid, present only when the measured property is qualified" + }, + "measurement_denominator": { + "anyOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/IdentityShapeDenominatorRef" + }, + { + "$ref": "#/components/schemas/IdentityShapeDenominatorUnresolved" + } + ] + }, + { + "type": "null" + } + ], + "title": "Measurement Denominator", + "description": "the graph measurementDenominator, present only on a ratio or per-capita measure: {'ref': dcid} when resolved, {'unresolved': true} when the arc exists but names no dcid" + } + }, + "additionalProperties": false, + "type": "object", + "title": "IdentityShapeSchema", + "description": "The described-ask arm of the identity core's `shape` union\n(`kind: \"statvar_schema\"`): up to five sparse schema members mapping 1:1\nonto Search's FiveTuple (see `engine.shape.identity_shape_for`, the\nadapter that builds this from a ShapeDraft's or a grounded wire Shape's\nfive-tuple dcids). Minted by Search for every standard and family shape.\n\nEvery member is optional and sparse -- an absent member contributes no\nbytes, the same sparse rule the facets map follows -- but an arm\ndescribing nothing is invalid: at least one member must be present (see\n`_at_least_one_schema_member`)." + }, + "IdentitySlot": { + "properties": { + "property": { + "type": "string", + "maxLength": 1024, + "title": "Property", + "description": "the constraint property dcid" + }, + "binding": { + "oneOf": [ + { + "$ref": "#/components/schemas/IdentityBindingValue" + }, + { + "$ref": "#/components/schemas/IdentityBindingSet" + }, + { + "$ref": "#/components/schemas/IdentityBindingUnbound" + }, + { + "$ref": "#/components/schemas/IdentityBindingExact" + } + ], + "title": "Binding", + "description": "this slot's bound state", + "discriminator": { + "propertyName": "state", + "mapping": { + "exact": "#/components/schemas/IdentityBindingExact", + "set": "#/components/schemas/IdentityBindingSet", + "unbound": "#/components/schemas/IdentityBindingUnbound", + "value": "#/components/schemas/IdentityBindingValue" + } + } + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "property", + "binding" + ], + "title": "IdentitySlot", + "description": "One what/how slot's identity contribution: property dcid + binding state.\n\nNever a where/when/source slot: `where` is carried by entity roles instead,\n`when` is carried by `requested_window` instead, and `source` is carried by\n`facets.provenance` instead -- all three would otherwise hash resolved\ngraph state rather than what was actually asked. Every IdentitySlot here\ncarries a real constraint property by construction of the shape grammar." + }, + "IdentityUnitRequest": { + "properties": { + "currency": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Z]{3}$" + }, + { + "$ref": "#/components/schemas/IdentityCurrencyRole" + } + ], + "title": "Currency", + "description": "the requested currency, upper-case ISO 4217 (e.g. 'USD'), or a role object" + }, + "prices": { + "type": "string", + "enum": [ + "current", + "constant" + ], + "title": "Prices", + "description": "'current' (nominal) prices, or 'constant' (real, base_year-anchored) prices" + }, + "base_year": { + "anyOf": [ + { + "type": "integer", + "maximum": 9007199254740991.0, + "minimum": -9007199254740991.0 + }, + { + "type": "null" + } + ], + "title": "Base Year", + "description": "required exactly when prices=='constant'; absent when prices=='current'" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "currency", + "prices" + ], + "title": "IdentityUnitRequest", + "description": "A completed unit-conversion request, in the identity core's own wire\nshape (`dfo_spec_kit.identity`'s `_build_unit_request`) -- legal only\ninside a unit-axis facet binding's `request` member\n(`IdentityFacetValueRequest`; see `BaseIdentity`'s model validator, which\nrefuses this form on any other axis).\n\nField-for-field mirror of the identity core's own `_UNIT_REQUEST_KEYS`\nschema: `currency` is upper-case ISO 4217 or a role object naming\nthe spec role whose bound entity's currency to use (see\n`IdentityCurrency`; the identity core NFC-normalises a string spelling\nbut does not case-fold, so a lower-case currency refuses here rather\nthan silently normalising to a different meaning at hash time), `prices`\nis current (nominal) or constant (real, anchored to\n`base_year`), and `base_year` is present exactly when `prices==\"constant\"`\n-- both directions enforced below, matching the identity core's own\n`invalid_unit_request` pair of checks. `base_year` is `StrictInt`,\nmatching `_require_integral_number`'s own exclusion of `bool` (a Python\n`int` subclass) and of numeric strings -- a lax `int` field would coerce\nJSON `true` to `1` and `\"2023\"` to `2023`, hashing a malformed request\nunder an unintended base year instead of refusing it. Under simultaneous\nviolations\n(e.g. a lower-case currency together with a missing base_year) the two\nlayers can report a different invariant first: this model's per-field\n`currency` pattern validates ahead of `_base_year_matches_prices` (a\n`mode=\"after\"` validator, which never runs once a field has already\nfailed), while the identity core checks `prices`-vs-`base_year` before\nthe currency regex. Same HTTP status/code either way -- message content\nonly." + }, + "IdentityWindowAll": { + "properties": { + "kind": { + "type": "string", + "const": "all", + "title": "Kind", + "default": "all" + } + }, + "additionalProperties": false, + "type": "object", + "title": "IdentityWindowAll", + "description": "No date signal was requested at all." + }, + "IdentityWindowLatest": { + "properties": { + "kind": { + "type": "string", + "const": "latest", + "title": "Kind", + "default": "latest" + } + }, + "additionalProperties": false, + "type": "object", + "title": "IdentityWindowLatest", + "description": "An explicit latest-ask: re-resolve to whatever year is CURRENTLY latest." + }, + "IdentityWindowRange": { + "properties": { + "kind": { + "type": "string", + "const": "range", + "title": "Kind", + "default": "range" + }, + "start_year": { + "anyOf": [ + { + "type": "integer", + "maximum": 9007199254740991.0, + "minimum": -9007199254740991.0 + }, + { + "type": "null" + } + ], + "title": "Start Year", + "description": "absent means open-ended start" + }, + "end_year": { + "anyOf": [ + { + "type": "integer", + "maximum": 9007199254740991.0, + "minimum": -9007199254740991.0 + }, + { + "type": "null" + } + ], + "title": "End Year", + "description": "absent means open-ended end" + } + }, + "additionalProperties": false, + "type": "object", + "title": "IdentityWindowRange", + "description": "A concrete requested date range; at least one bound is always present." + }, + "JsonValue": {}, + "LeftOut": { + "properties": { + "reason": { + "type": "string", + "pattern": "^[a-z][a-z0-9_]{0,63}$", + "title": "Reason" + }, + "count": { + "type": "integer", + "minimum": 0.0, + "title": "Count" + }, + "of": { + "type": "string", + "enum": [ + "entities", + "periods", + "entity_periods", + "pooled_entities" + ], + "title": "Of" + }, + "role": { + "type": "string", + "pattern": "^[a-z][A-Za-z0-9]{0,63}$", + "title": "Role" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "reason", + "count", + "of" + ], + "title": "LeftOut", + "description": "One data gap: why some data was left out, how many, and of what. The caller's own\nselection is a parameter and never appears here.\n\nA `pooled_entities` count is of the distinct parties of one pooled role, named in `role`,\nacross all the step's inputs. Those parties are never among the entities the step kept.\nOnly that `of` takes a `role`, and it requires one." + }, + "Manifest": { + "properties": { + "schema_version": { + "type": "integer", + "title": "Schema Version", + "default": 1 + }, + "definition": { + "$ref": "#/components/schemas/DefinitionModel" + }, + "content_version": { + "type": "string", + "title": "Content Version" + }, + "prepared_at": { + "type": "string", + "format": "date-time", + "title": "Prepared At" + }, + "coverage": { + "$ref": "#/components/schemas/CoverageModel" + }, + "citation": { + "$ref": "#/components/schemas/CitationModel" + }, + "trace": { + "additionalProperties": true, + "type": "object", + "title": "Trace" + }, + "warnings": { + "items": { + "$ref": "#/components/schemas/WarningModel" + }, + "type": "array", + "title": "Warnings" + }, + "diagnostics": { + "items": { + "$ref": "#/components/schemas/DiagnosticModel" + }, + "type": "array", + "title": "Diagnostics", + "description": "facts about how this response was produced, for developers: a citation whose sources declare no processing level, and an origin catalogue past its staleness limit. A version stores none; each response states its own" + }, + "artifacts": { + "items": { + "$ref": "#/components/schemas/ArtifactEntryModel" + }, + "type": "array", + "title": "Artifacts", + "description": "every servable artifact for this rendering, in a fixed order: every data artifact first, the series-statistics/1 artifact (rendering.statistics == 'series') last, if present. A caller selecting the data artifact should check rendering rather than take the first entry, but the order itself is a stable contract, not an accident of storage" + }, + "series_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Series Count" + }, + "output_options": { + "anyOf": [ + { + "$ref": "#/components/schemas/OutputOptionsModel" + }, + { + "type": "null" + } + ] + }, + "series_coverage_stamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Series Coverage Stamp", + "description": "the series_coverage artifact stamp this request's sync-admission estimate was computed against, kept as lineage only. content_version is a pure function of the frame and does not fold this in. Not the same coverage as the 'coverage' field above (materialise.window.Coverage's row/dimension/window report)" + }, + "retention": { + "anyOf": [ + { + "$ref": "#/components/schemas/RetentionModel" + }, + { + "type": "null" + } + ], + "description": "how long this version can still be fetched: the retention of the frame every file renders from (a derived version's base frame). Each door sets it on its response" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "definition", + "content_version", + "prepared_at", + "coverage", + "citation", + "trace", + "artifacts" + ], + "title": "Manifest", + "description": "`trace` stays a plain dict, since `materialise.trace.ManifestTrace.to_dict()`\nis already this field's exact wire shape.\n\n`series_count` is the number of distinct series this definition\nresolves, as the version's description counts them (`statistics.SeriesFigures.series`): a\nseries and the estimates continuing it count once, though the statistics artifact holds a\nrow for each method. `None` means a version record minted before this field existed, whose old\ninline `statistics` no fact carries. The per-series detail itself lives in the\n`series-statistics/1` Parquet artifact every door that returns a\n`Manifest` lists in `artifacts` whenever `series_count` is not `None`\n(`datasets_api.render.render_and_store_series_statistics`), never\ninline on this model.\n\n`output_options` is `None` on a version record minted before the field\nexisted, the same convention `series_count` uses.\n\n`prepared_at` is when this version was first prepared, written once at its\nfirst mint and stored with it, so every re-mint and re-render reads the same\ninstant." + }, + "Matched": { + "properties": { + "text": { + "type": "string", + "title": "Text" + }, + "as": { + "type": "string", + "enum": [ + "name", + "alias", + "code" + ], + "title": "As" + } + }, + "type": "object", + "required": [ + "text", + "as" + ], + "title": "GraphResolveMatched", + "description": "The listed text the input matched, and whether it is the entity's name, an alias, or a\ncode. A phrase naming a group's members (\"EU countries\") matches as `alias`." + }, + "Measure": { + "properties": { + "label": { + "type": "string", + "title": "Label", + "description": "the measure's noun phrase, such as `net disbursements`" + } + }, + "type": "object", + "required": [ + "label" + ], + "title": "GraphDefinitionMeasure", + "description": "What the variable counts or sums, as the code index names it." + }, + "MeasureAxisValue": { + "properties": { + "axis": { + "type": "string", + "title": "Axis", + "description": "the declared measure-axis identifier (code_index.types.MeasureAxis.axis), e.g. 'measuredProperty' or a constraint-property dcid such as 'financialFlowType'" + }, + "value": { + "$ref": "#/components/schemas/GraphRef", + "description": "the value's dcid and the measure index's label for it, e.g. Gross" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "axis", + "value" + ], + "title": "MeasureAxisValue", + "description": "One measure axis and the value a measure partition holds on it (see\nResolvedSpec.measure_axis_values)." + }, + "MemberItem": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + } + }, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "GraphMemberItem", + "description": "One item of a list: its dcid and the owner's label for it, `null` where the owner holds\nno name." + }, + "MembersEnvelope": { + "$id": "https://schemas.dfo.one.org/datasets/v1/members-envelope.json", + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "spec_id": { + "type": "string", + "pattern": "^spec_", + "title": "Spec Id" + }, + "members": { + "items": { + "$ref": "#/components/schemas/ServedMember" + }, + "type": "array", + "title": "Members" + }, + "served_count": { + "type": "integer", + "title": "Served Count" + }, + "family_member_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Family Member Count" + }, + "family_member_digest": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Family Member Digest" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "schema_version", + "spec_id", + "members", + "served_count", + "family_member_count", + "family_member_digest" + ], + "title": "MembersEnvelope", + "description": "`POST /api/datasets/{id}/members`'s response: the members a mint of the spec serves,\nresolved without materialising a frame.\n\n`members` lists them sorted by `ref`, and `served_count` counts them.\n`family_member_count` and `family_member_digest` state the whole population the identity\nadmits, before a broader member's dominated members are dropped, as a mint's\n`trace.family_member_count` and `trace.family_member_digest` state it; both are `null`\nwhen member resolution cannot state that population." + }, + "MembersPage": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node whose list this is" + }, + "relation": { + "type": "string", + "enum": [ + "codes", + "children", + "datasets", + "variables", + "members", + "countries", + "facets" + ], + "title": "Relation" + }, + "projection": { + "anyOf": [ + { + "$ref": "#/components/schemas/Projection" + }, + { + "type": "null" + } + ], + "description": "the membership projection listed; null for a relation that takes none" + }, + "as_of": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "As Of", + "description": "the date membership was read at; null for today" + }, + "items": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/CodeItem" + }, + { + "$ref": "#/components/schemas/FacetItem" + }, + { + "$ref": "#/components/schemas/MemberItem" + } + ] + }, + "type": "array", + "title": "Items" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor", + "description": "the cursor for the next page; null when this page ends the list" + }, + "complete": { + "type": "boolean", + "title": "Complete", + "description": "whether the walk reached the end of a list the owner holds in full" + }, + "total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Total", + "description": "the list's length; null where the list is partial" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the code of each way the list is partial" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the list read" + } + }, + "type": "object", + "required": [ + "ref", + "relation", + "projection", + "as_of", + "items", + "next_cursor", + "complete", + "total", + "gaps", + "built_from" + ], + "title": "GraphMembersPage", + "description": "One page of `GET /api/graph/node/{dcid}/members`." + }, + "MembershipBlock": { + "properties": { + "authority": { + "$ref": "#/components/schemas/Authority" + }, + "as_of": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "As Of", + "description": "the date the read asked for; null for today" + }, + "effective_date": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "Effective Date", + "description": "the latest membership change on or before the date; null for an undated membership" + }, + "projections": { + "items": { + "$ref": "#/components/schemas/ProjectionCount" + }, + "type": "array", + "title": "Projections" + } + }, + "type": "object", + "required": [ + "authority", + "as_of", + "effective_date", + "projections" + ], + "title": "GraphMembershipBlock", + "description": "A group's or region's membership under its declared authority." + }, + "Methodology": { + "properties": { + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "how the publisher collects and compiles the data, as CommonMark" + } + }, + "type": "object", + "required": [ + "description" + ], + "title": "Methodology" + }, + "MintOptions": { + "properties": { + "format": { + "type": "string", + "enum": [ + "csv", + "xlsx", + "parquet" + ], + "title": "Format", + "default": "csv" + }, + "bundle": { + "type": "boolean", + "title": "Bundle", + "default": true + }, + "groupby": { + "anyOf": [ + { + "$ref": "#/components/schemas/GroupbyOptions" + }, + { + "type": "null" + } + ] + }, + "pivot": { + "anyOf": [ + { + "$ref": "#/components/schemas/PivotOptions" + }, + { + "type": "null" + } + ] + }, + "columns": { + "anyOf": [ + { + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array" + }, + { + "type": "null" + } + ], + "uniqueItems": true, + "title": "Columns" + }, + "without_party_totals": { + "type": "boolean", + "title": "Without Party Totals", + "default": false + }, + "layout": { + "anyOf": [ + { + "type": "string", + "const": "frame" + }, + { + "type": "null" + } + ], + "title": "Layout" + } + }, + "additionalProperties": false, + "type": "object", + "title": "MintOptions", + "description": "Rendering-only, never hashed into identity. `format`/`bundle`/`pivot`/\n`columns`/`groupby`/`without_party_totals` are this deployment's live rendering surface. A\n`groupby.by` entry names a code system some deployment declaration\nmarks summable, a role/entity column, `stat_var`, or a column every\nframe carries regardless of shape; any other name refuses\n`rollup_not_summable` (`datasets_api.groupby.refuse_unknown_by_axes`).\nA declared axis this frame did not decode is simply absent from the\ncollapse-set computation, not an error (see\n`datasets_api.groupby.collapse_axes`); an unsafe collapse refuses\n`rollup_not_summable` too, naming the axis and precondition\n(`materialise.reshape.groupby_sum`,\n`datasets_api.groupby.refuse_stat_var_collision`,\n`datasets_api.groupby.refuse_decode_gaps`). A `columns` entry naming a\nrecognised-but-disabled enrichment field refuses `capability_unavailable`.\n`columns` selects the table and decoded columns it names. A list that names\nonly enrichment fields selects nothing: every default column stays,\ndecoded columns included, and the enrichments are added. A list that mixes\na table column with an enrichment selects. Without a pivot, a list that\nnames no decoded column keeps all of them, `status` is accepted and left\nout, `_label` is written by default (a list naming it keeps\n``), and the written order follows the long layout\n(`materialise.projection`) whatever order the list names.\n\n`layout: \"frame\"` writes a bare parquet file in the frame layout instead\nof the long layout: the frame's grammar columns as reshaped, with\ndecoded axes as `stat_var_`, `status` kept, and a converted\nunit as its JCS request text. `columns` then selects over those columns,\nas it does for pivot output. It refuses with `bundle: true`, a `pivot`,\nor a format other than parquet.\n\n`without_party_totals: true` leaves out the rows whose party, on a flow party role the\nserved identity binds no entity on, the code index declares a group total\n(`datasets_api.party_totals`). It runs on the frame before any reshape, so a `groupby`\nsums members alone. A cut that leaves rows out mints a version of its own, as a `groupby`\ncollapse does; one that leaves nothing out serves the frame's own version." + }, + "MintRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "input": { + "oneOf": [ + { + "$ref": "#/components/schemas/SpecIdInput" + }, + { + "$ref": "#/components/schemas/StatVarSetInput" + } + ], + "title": "Input", + "discriminator": { + "propertyName": "kind", + "mapping": { + "spec_id": "#/components/schemas/SpecIdInput", + "statvar_set": "#/components/schemas/StatVarSetInput" + } + } + }, + "options": { + "$ref": "#/components/schemas/MintOptions" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "input" + ], + "title": "MintRequest", + "description": "Body of `POST /api/datasets`: one `input` and the render `options`." + }, + "MissingEntityModel": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "string", + "title": "Label" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "MissingEntityModel" + }, + "NationalCurrency": { + "properties": { + "currencies": { + "type": "integer", + "title": "Currencies" + }, + "places": { + "type": "integer", + "title": "Places" + } + }, + "type": "object", + "required": [ + "currencies", + "places" + ], + "title": "GraphAvailabilityNationalCurrency", + "description": "The units that are each covered place's own currency." + }, + "NearestRealSpec": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "deterministic hash of (shape + canonical slot bindings); permalink-safe, dedup key, golden-comparison handle, cache key" + }, + "definition": { + "$ref": "#/components/schemas/SpecDefinition", + "description": "the canonical definition this Spec was resolved from: {schema_version, identity}, the same shape Unsupported.definition uses. definition.identity is the identity-core projection this spec_id was minted from, serialised once and never re-derived; hashing it reproduces spec_id by construction. Post definition.identity back byte-for-byte as ResubmitIdentityPayload.identity to edit this Spec. Directional entities remain nested in identity.entities." + }, + "resolved": { + "$ref": "#/components/schemas/ResolvedSpec", + "description": "the engine's report of what it did with the ask: stat_vars, entities, coverage, trace, and every other display/diagnostic field. Never hashed; see ResolvedSpec" + }, + "relaxation": { + "$ref": "#/components/schemas/Relaxation", + "description": "the definition part this suggestion relaxed, and the value(s) it dropped" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "definition", + "resolved", + "relaxation" + ], + "title": "NearestRealSpec", + "description": "A nearest_real suggestion: a full Spec found by relaxing one constraint\nbinding and re-confirming the result against the live graph.\n\nGraph-re-confirmed only, never fabricated. See relaxation for which\nbinding was dropped to find it." + }, + "NoData": { + "properties": { + "reason": { + "type": "string", + "enum": [ + "source_not_resolved", + "source_ambiguous", + "source_code_not_held", + "source_code_ambiguous", + "source_code_shares_variable", + "entity_not_resolved", + "entity_ambiguous", + "entity_set_too_large", + "entity_role_not_admitted", + "variable_not_resolved", + "role_not_resolved", + "unit_not_resolved", + "rate_coverage_gap", + "no_matching_slice", + "binding_mismatch", + "denominator_not_available", + "no_observations", + "facet_not_available", + "role_incompatible", + "role_signature_incompatible", + "qualifier_not_bound" + ], + "title": "Reason", + "description": "why nothing could be returned, in contract resolution order. \"entity_not_resolved\" means a named entity could not be resolved to a graph node; \"entity_ambiguous\" means a named entity matched more than one graph candidate and none could be preferred over the others, distinct from \"entity_not_resolved\", where no node matched at all; \"entity_role_not_admitted\" means a named entity resolved to exactly one graph node, but no role any candidate shape declares admits that node's graph type -- the entity is real, just not the kind of thing this query's data is reported for; \"entity_set_too_large\" means every named entity resolved, but the places the request names, counting the members of each group or region among them and summed over the roles they sit on, exceed what the engine binds in one request -- distinct from every other entity_* reason, where one entity, not the size of the set, is what failed; \"variable_not_resolved\" means no StatVar matched the variable text (e.g. an absent posted stat_var_dcid or entity, or no measure match at all); \"role_not_resolved\" means the query names a role the engine could not resolve; \"unit_not_resolved\" means the unit binder could not classify a token in the requested unit phrase against its lexicons; \"no_matching_slice\" means the measure matched fine, but the requested combination has no corresponding data series -- the constructed/derived variable does not exist in the graph at all. Covers an identity resubmit refine edit with no confirmable sibling StatVar for the edited slice, and a dev-finance scheme x purpose x recipient combination that was never published as a series, on raw-text and resubmit alike; \"binding_mismatch\" means the variable resolved and graph-confirmed StatVars exist, but none satisfies the requested slot bindings, either because a resolved value on a bound property mismatched or because the StatVar's value on a bound property is present but could not be read (an unresolvable dcid); distinct from \"no_matching_slice\" (the combination was never published at all) and \"variable_not_resolved\" (no StatVar matched at all); \"denominator_not_available\" means the query asks for a normalised form (per person, per area, a rate or a share) or names a denominator, and the matched series is not in that form or divides by another base; \"no_observations\" means a StatVar WAS confirmed to exist but has no observation at the resolved entity (it exists, but not data here); \"facet_not_available\" means observations exist at the entity, none under the requested facet values; \"role_incompatible\" means the role is real, and the StatVar does not declare it; \"role_signature_incompatible\" means the resolved StatVars carry incompatible role signatures and no partition into candidates was possible; \"source_code_not_held\" means no variable held under the part's source_code by a source search serves can answer the part: no served source holds the code, the part's sources exclude every source that does, or the code's variables cannot answer the part as asked; \"source_code_ambiguous\" means two of the part's sources hold its source_code; \"source_code_shares_variable\" means the source_code's variables answer other codes of its source too, so search cannot serve the code alone; \"qualifier_not_bound\" means the variable resolved to a series family, but a narrowing term the request's text named bound no constraint slot: no code system in the packaged index carries it, or its registered rows landed in no binding" + }, + "cause": { + "anyOf": [ + { + "$ref": "#/components/schemas/Cause" + }, + { + "type": "null" + } + ], + "description": "why this refusal fired, present only for reason=rate_coverage_gap (the structured door's same-named ProblemDetails extension); omitted on every other reason" + }, + "category": { + "type": "string", + "enum": [ + "unresolved", + "absent" + ], + "title": "Category", + "description": "derived from reason, never independently settable: \"entity_not_resolved\", \"entity_ambiguous\", \"entity_set_too_large\", \"entity_role_not_admitted\", \"variable_not_resolved\", \"role_not_resolved\", \"source_not_resolved\", \"source_ambiguous\", \"source_code_not_held\", \"source_code_ambiguous\", \"source_code_shares_variable\", and \"unit_not_resolved\" are \"unresolved\" (the request could not be read into the graph); every other code is \"absent\" (the read request names a place holding nothing)", + "default": "absent" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Message", + "description": "the plain-language sentence for reason, naming the query terms it concerns where the reason has them (the indicator, place, or category wording), so a client can show a person the reason beside its code. Every no_data part the engine returns sets it. Clients must not parse it" + }, + "nearest_real": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/NearestRealSpec" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Nearest Real", + "description": "optional; up to two real, grounded specs found by relaxing one constraint at a time and re-confirming against the live graph. Each carries its own relaxation naming the definition part relaxed and the value(s) it dropped. Shaped by response_options and banded by confidence like any returned spec. Distinct from flagged_match (the elected variable itself) and alternate_match (a different variable). nearest_real varies the SAME variable's own constraints, never the variable." + }, + "gate": { + "anyOf": [ + { + "type": "string", + "enum": [ + "no_member_has_data_at_place", + "no_member_asserts_bound_properties", + "only_alternate_has_data" + ] + }, + { + "type": "null" + } + ], + "title": "Gate", + "description": "optional; the failed quality gate's code from the platform registry, one of the three registry gate codes (no_member_has_data_at_place, no_member_asserts_bound_properties, only_alternate_has_data). The single home for the code regardless of which near-match field carries the Spec: present exactly when flagged_match or alternate_match is present, except a role_incompatible refusal before or during materialise whose flagged_match records the confirmed elected identity without a gate (role incompatibility prevents an availability verdict), a qualifier_not_bound refusal, whose flagged_match records the graph-confirmed elected spec without a gate because the qualifier guard refuses before an availability verdict exists, or a denominator_not_available refusal, whose flagged_match records the elected spec the form or denominator check refused. Absent on every other no_data outcome. At most one of flagged_match and alternate_match is present at a time." + }, + "flagged_match": { + "anyOf": [ + { + "$ref": "#/components/schemas/Spec" + }, + { + "type": "null" + } + ], + "description": "optional; the elected variable's own Spec, present whenever gate fired and a groundable identity exists for the elected shape, or for a role_incompatible, qualifier_not_bound or denominator_not_available refusal that records its graph-confirmed identity without a gate: role incompatibility prevents an availability verdict, the qualifier guard refuses before one exists, and the denominator check refuses the series for its form, not its data. See gate for which check failed. available_at_place is False and confidence is low on gate=no_member_has_data_at_place; both stay at their not-assessed default (None) on gate=no_member_asserts_bound_properties, since there is no resolved place to be unavailable at. Absent on gate=only_alternate_has_data, where no groundable Spec for the elected shape exists; alternate_match carries the substitute the engine found instead. Distinct from nearest_real, up to two constraint-RELAXED specs that DO have data nearby. flagged_match is the elected variable itself, unavailable as the request asked for it." + }, + "alternate_match": { + "anyOf": [ + { + "$ref": "#/components/schemas/Spec" + }, + { + "type": "null" + } + ], + "description": "optional; a categorically different, data-bearing variable the request did not elect, present exactly when gate == 'only_alternate_has_data'. elected_count still counts the variable the request actually asked for; alternate_match is the one substitute the engine found nearby with observations of its own. Distinct from flagged_match (the elected variable itself, present on the other two gates) and from nearest_real (up to two constraint-relaxed variants of the SAME variable). alternate_match always names a different variable." + }, + "elected_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Elected Count", + "description": "optional; how many StatVars the request actually elected. Present whenever the elected shape's variable identity was graph-confirmed, whatever no_data reason or gate the outcome ultimately carries. None when the outcome stops short of a graph-confirmed identity altogether (variable_not_resolved, role_not_resolved, role_signature_incompatible, and binding_mismatch all resolve no StatVar to count). Counts the SAME variable as flagged_match whenever flagged_match is present. On gate=only_alternate_has_data, where flagged_match is absent, elected_count still counts the variable the request elected, distinct from alternate_match's different variable." + }, + "entity_terms": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Entity Terms", + "description": "the query entity text responsible for an entity-resolution outcome, in query order: every entity the engine could not resolve for entity_not_resolved, every ambiguous wording for entity_ambiguous, every resolved-but-unadmitted entity for entity_role_not_admitted, or every name whose flow direction the query leaves untold for role_not_resolved. Empty for every other no_data reason. This structured list is the client-facing source of those terms; rendered_sentence may quote the same wording for people, but clients must not parse it." + }, + "ambiguous_entities": { + "items": { + "$ref": "#/components/schemas/AmbiguousEntityGroup" + }, + "type": "array", + "title": "Ambiguous Entities", + "description": "every ambiguous wording responsible for an entity_ambiguous outcome, in query order, each paired with the graph candidates it could name. Empty for every other no_data reason. Invariant: every group's `text` equals some restatement.entities[i].text on the same part. Additive to entity_terms, which carries the same wordings as bare strings; rendered_sentence is unaffected by this field and quotes the same wordings and candidate names for people, but clients must not parse it." + }, + "source_terms": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Source Terms", + "description": "the source wordings responsible for a source-resolution outcome, in query order: every included wording that matched no admitted source for source_not_resolved, every ambiguous wording for source_ambiguous, and the part's source_code for source_code_not_held, source_code_ambiguous and source_code_shares_variable. Empty for every other no_data reason. rendered_sentence may quote the same wording for people, but clients must not parse it." + }, + "ambiguous_sources": { + "items": { + "$ref": "#/components/schemas/AmbiguousSourceGroup" + }, + "type": "array", + "title": "Ambiguous Sources", + "description": "every ambiguous source wording responsible for a source_ambiguous outcome, in query order, each paired with the admitted sources it could name, and for source_code_ambiguous the part's source_code paired with the provenances holding it. Empty for every other no_data reason. A client posts the matching entry of options." + }, + "unit_alternatives": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/UnitAlternative" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Unit Alternatives", + "description": "the currencies a unit_not_resolved outcome offers, in the binder's order: the candidate ISO codes for an ambiguous currency name with no declared alias (XOF, XAF and CHF for 'francs'), or the role shapes for a role-relative currency phrase beside entities on two roles. Absent on every other outcome, and on a unit_not_resolved outcome the binder offers no candidates for" + }, + "unbound_qualifiers": { + "items": { + "$ref": "#/components/schemas/ResolvedQualifier" + }, + "type": "array", + "title": "Unbound Qualifiers", + "description": "the ResolvedQualifier entries responsible for a qualifier_not_bound outcome, in query order: every entry from flagged_match.resolved.trace.query_qualifiers whose disposition is not \"bound\" (\"unbound\": a named code row exists but no final binding covers it; \"no_vocabulary\": the text names no code at all), then, for a part naming or leaving out sources, each source it could not bind, an \"unbound\" entry under the source's label whose named holds the source's references. Empty for every other no_data reason. This structured list is the client-facing source of which terms went unrecognised, alongside each one's own disposition; rendered_sentence may quote the same wording for people, but clients must not parse it." + }, + "denominator": { + "anyOf": [ + { + "$ref": "#/components/schemas/NoDataDenominator" + }, + { + "type": "null" + } + ], + "description": "the denominator the question named and the one the flagged match divides by, set on every denominator_not_available refusal the engine returns after electing a series; null for every other no_data reason. A client can offer the flagged match, or fetch its nearest_real level and the denominator asked and divide them" + }, + "options": { + "items": { + "$ref": "#/components/schemas/NoDataOption" + }, + "type": "array", + "title": "Options", + "description": "one ready request per choice of an entity_ambiguous, source_ambiguous, source_code_ambiguous, role_not_resolved or unit_not_resolved refusal, in query then candidate order. An entity option pins the candidate on every row with the ambiguous wording and every entity that resolved to one node; named groups, sets read as members and other ambiguous wordings stay unpinned, so a second ambiguity refuses again with the first pick kept. A candidate that is a group's own node, asked for its members, posts the group's registry name with no dcid, and has no option when no registry name resolves to the group alone. A source option sets the candidate's ref on the ambiguous mention; a source-code option names the holding provenance as the part's only included source. A role option states a direction for every name the question left unstated, so that every axis the shape declares a role on and the part does not ask open holds a place, offered while that gives at most six readings. A unit option names one of unit_alternatives in place of the ambiguous currency words. An option whose part breaks the ParsedPart bounds, or states a direction its own wording contradicts, is left out. Empty for other reasons; when the part's inputs exceed the ParsedPart bounds; on a role_not_resolved refusal with more than six readings, with no reading that leaves a place on every such axis, whose readings were all read with none holding data, or that the shape refused before placing names; and on a unit_not_resolved refusal without unit_alternatives" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "reason" + ], + "title": "NoData", + "description": "Outcome when no grounded result can be returned." + }, + "NoDataDenominator": { + "properties": { + "asked": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the denominator the question named, as the search read it from the bases the candidate series divide by; null when the question named none, or named one that no candidate series divides by" + }, + "found": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the denominator the flagged match divides by; null when it states none (a level such as an amount in US dollars, or a series whose name alone gives its base)" + } + }, + "additionalProperties": false, + "type": "object", + "title": "NoDataDenominator", + "description": "The denominators a denominator_not_available refusal compared: the one the question\nnamed and the one its flagged match divides by -- NoData.denominator." + }, + "NoDataOption": { + "properties": { + "mentions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Mentions", + "description": "the request's own words this option settles, in query order: the ambiguous entity wording, the ambiguous source wording, the part's source_code, the part's unit_text, or for role_not_resolved every name whose direction the option states" + }, + "label": { + "type": "string", + "title": "Label", + "description": "the choice in words for a menu: the candidate's display name, prefixed 'Excluding' for a source the part excludes; for role_not_resolved the direction the option reads, such as 'France to Germany' or 'To Kenya and Uganda'; for a role currency the role's currency, such as \"recipient's currency\". Clients must not parse it" + }, + "data_query": { + "$ref": "#/components/schemas/ParsedInput", + "description": "a one-part parsed input settling this choice only. Post it unchanged as the input of /api/search/resolve; its one part is a dataset_resubmit parsed entry's part. A second ambiguous wording refuses again. Whether data exists for it is not checked" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "mentions", + "label", + "data_query" + ], + "title": "NoDataOption", + "description": "One answer to the choice a no_data refusal asks for: the words it settles, a label\nfor people, and the request that settles them. It is one entry of NoData.options." + }, + "NoDataPart": { + "properties": { + "variable_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Variable Text", + "description": "the variable text this part answers, in the order asked. This part's position in Resolution.parts equals the same variable_index every SSE event keyed by variable_index uses (ShapeEvent, StepEvent, SentenceEvent). Every dataset_resubmit entry kind (identity, candidates, placeholder, and parsed through its nested ParsedPart) requires its own posted variable_text, so this field is always the posted text echoed back onto the rebuilt part, never null. Null only when the whole posted query was empty or whitespace-only (raw_text door), which refuses variable_not_resolved before extraction runs and so has no text to name." + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part was asked beside the others to be compared with them. A client resubmitting an identity, candidate set, or placeholder posts this flag on that entry to preserve the comparison. Two parts marked separate that resolve to one reading carry the same spec_id and stay two parts. False, the default, is omitted", + "default": false + }, + "warnings": { + "items": { + "$ref": "#/components/schemas/Warning" + }, + "type": "array", + "title": "Warnings", + "description": "this part's own run-health signals. A part folded into an earlier part's spec (see DefinitePart.spec) carries binding_folded alone. The merged spec's own resolved warnings live only on the first part that carries it. An unfolded part carries the warnings raised while resolving this part, plus observations_omitted on a candidates part when response_options.include_observations was set." + }, + "timing_ms": { + "anyOf": [ + { + "$ref": "#/components/schemas/Timing" + }, + { + "type": "null" + } + ], + "description": "this part's own latency breakdown, where by_step names only the phases this part ran and total sums them, leaving out the shape_* stages nested inside shape. Excludes the shared, once-per-request steps (e.g. extract), which diagnostics.timing_ms.by_step carries once for the whole request; distinct too from diagnostics.timing_ms.total, the whole request's wall-clock elapsed time." + }, + "rendered_sentence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Rendered Sentence", + "description": "a human-readable string. For candidates, a header naming how many readings there are ('3 readings.'), then each shown candidate's heading and a byline led by the source and span that set it apart; for no_data, a heading in the same claim form naming the entity, measure, and counterpart that were checked. Either ends with the text of this part's departures, in order, and a candidates part's then closes with its assumptions clause. For a definite part this stays null or omitted: the confirmation sentence (heading and byline) lives at spec.resolved.rendered_sentence, and its departures reach the envelope's composed sentence." + }, + "sentence_plan": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentence Plan", + "description": "the ordered token form of rendered_sentence, present whenever it is. For a definite part this stays null or omitted. spec.resolved.sentence_plan carries the confirmation sentence's own plan instead." + }, + "restatement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ParsedPart" + }, + { + "type": "null" + } + ], + "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + }, + "departures": { + "items": { + "$ref": "#/components/schemas/Departure" + }, + "type": "array", + "title": "Departures", + "description": "every way this part's answer differs from what its request asked, ordered by how much each changes the number: closest_match, measure_not_applied, operation_not_applied, breakdown_not_applied, entity_unavailable, year_unavailable, modelled_values, group_read_as_members, direction_discarded, direction_inferred, scope_limited. [] when the answer is what was asked. A client that renders its own sentence reads them here; each one's text also closes the sentence that carries this part (see Departure.text). A warning on the same part reports run health and stays separate" + }, + "assumptions": { + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array", + "title": "Assumptions", + "description": "every value the engine filled that the request did not ask for, in clause order. Declared defaults come first, in the order of the Spec's trace.slot_filters, then open roles, then the place scope. A declared default is a slot the request left open that its code system's or shape's declared default fixed, named by the bound code's full label. An open role is a flow role no request word asked for, read across every entity on it with data. It is either a role the role scope default filled (resolved.scope on that axis), whatever its member count, served as one series per member where the shape declares the role, or a role the heading states with no entity of its own ('from 164 providers', 'owed to all creditors'), served as the total over its members. A role the identity binds in entities or lists in open_roles, that one of the part's operations runs over ('top 5 donors'), or that the request's words asked every member of ('all donors'), is asked. The place scope is a request that named no place, read across every place with data. Every door fills assumptions. A definite part reads them from its Spec, a candidates part carries the items every list in CandidatesPart.reading_assumptions holds alike, text included, and no_data and unsupported parts carry []. A dataset_resubmit identity entry posts every slot bound, so its part states the items of the entry's assumptions echo that still hold (see ResubmitIdentityEntry.assumptions), and a candidates entry reads each reading with its candidate's echo (see ResubmitCandidate.assumptions). The sentence that carries this part closes with them as one segment='assumption' clause ('Assumed: official development assistance; every provider.'), after its departures. [] when the answer fills nothing" + }, + "status": { + "type": "string", + "const": "no_data", + "title": "Status", + "description": "nothing to return" + }, + "no_data": { + "$ref": "#/components/schemas/NoData", + "description": "the reason" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "status", + "no_data" + ], + "title": "NoDataPart", + "description": "Nothing could be returned for this part." + }, + "NodeRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + } + }, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "GraphNodeRef", + "description": "A graph reference. `label` is `null` when the target is not held, carries no `name`, or\ncarries only a `name` equal to its own dcid." + }, + "NodesRequest": { + "properties": { + "dcids": { + "items": { + "type": "string", + "maxLength": 512, + "pattern": "^[A-Za-z0-9_.\\-]+(?:/[A-Za-z0-9_.\\-]+)*$" + }, + "type": "array", + "maxItems": 50, + "minItems": 1, + "title": "Dcids" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "dcids" + ], + "title": "GraphNodesRequest", + "description": "`dcids`: 1 to `NODES_MAX_DCIDS` node dcids read as one batch, in one DCP-read\nexecutor job. Each dcid matches the GET route's `{dcid}` path syntax and its 512-character\nceiling." + }, + "NodesResponse": { + "properties": { + "nodes": { + "items": { + "anyOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/StatVarNode" + }, + { + "$ref": "#/components/schemas/CodeSystemNode" + }, + { + "$ref": "#/components/schemas/CodeNode" + }, + { + "$ref": "#/components/schemas/GroupNode" + }, + { + "$ref": "#/components/schemas/CountryNode" + }, + { + "$ref": "#/components/schemas/ContinentNode" + }, + { + "$ref": "#/components/schemas/SubregionNode" + }, + { + "$ref": "#/components/schemas/ContinentalUnionNode" + }, + { + "$ref": "#/components/schemas/PlaceOtherNode" + }, + { + "$ref": "#/components/schemas/OrganisationNode" + }, + { + "$ref": "#/components/schemas/AggregateNode" + }, + { + "$ref": "#/components/schemas/UnitNode" + }, + { + "$ref": "#/components/schemas/SourceNode" + }, + { + "$ref": "#/components/schemas/DatasetNode" + }, + { + "$ref": "#/components/schemas/ProvenanceNode" + }, + { + "$ref": "#/components/schemas/OtherNode" + } + ], + "discriminator": { + "propertyName": "kind", + "mapping": { + "aggregate": "#/components/schemas/AggregateNode", + "code": "#/components/schemas/CodeNode", + "code_system": "#/components/schemas/CodeSystemNode", + "continent": "#/components/schemas/ContinentNode", + "continental_union": "#/components/schemas/ContinentalUnionNode", + "country": "#/components/schemas/CountryNode", + "dataset": "#/components/schemas/DatasetNode", + "group": "#/components/schemas/GroupNode", + "organisation": "#/components/schemas/OrganisationNode", + "other": "#/components/schemas/OtherNode", + "place_other": "#/components/schemas/PlaceOtherNode", + "provenance": "#/components/schemas/ProvenanceNode", + "source": "#/components/schemas/SourceNode", + "stat_var": "#/components/schemas/StatVarNode", + "subregion": "#/components/schemas/SubregionNode", + "unit": "#/components/schemas/UnitNode" + } + } + }, + { + "$ref": "#/components/schemas/NotHeldEntry" + } + ] + }, + "type": "array", + "title": "Nodes" + } + }, + "type": "object", + "required": [ + "nodes" + ], + "title": "NodesResponse", + "description": "`nodes` is index-aligned with the request's `dcids`: a repeated dcid repeats its\nentry. Each entry is the body `GET /api/graph/node/{dcid}` returns for that dcid, or a\n`not_held` entry where that route answers 404." + }, + "NotHeldEntry": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "status": { + "type": "string", + "const": "not_held", + "title": "Status", + "default": "not_held" + } + }, + "type": "object", + "required": [ + "ref", + "status" + ], + "title": "GraphNotHeldEntry", + "description": "A batch entry for a dcid where `GET /api/graph/node/{dcid}` answers 404\n`node_not_held`." + }, + "ObservationPoint": { + "properties": { + "date": { + "type": "string", + "title": "Date", + "description": "the observation date, e.g. '2018'" + }, + "value": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Value", + "description": "the observed value; null when the graph reports a date with no value" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "date", + "value" + ], + "title": "ObservationPoint", + "description": "One (date, value) pair from a resolved StatVar's observation series." + }, + "ObservationSeries": { + "properties": { + "stat_var": { + "$ref": "#/components/schemas/SeriesStatVarRef", + "description": "the StatVar these points observe" + }, + "entities": { + "items": { + "$ref": "#/components/schemas/SeriesEntityRef" + }, + "type": "array", + "title": "Entities", + "description": "the role tuple this series observes -- one entry for a standard single-role series (role='observationAbout'), two for a dev-finance bilateral series (role='origin' and role='destination')" + }, + "axes": { + "items": { + "$ref": "#/components/schemas/SeriesAxisRef" + }, + "type": "array", + "title": "Axes", + "description": "one entry per constraint the StatVar declares with a resolved value, ordered by property dcid; empty for a StatVar with no constraints. A client names each property from the Spec's slots" + }, + "points": { + "items": { + "$ref": "#/components/schemas/ObservationPoint" + }, + "type": "array", + "title": "Points", + "description": "chronological observation points from the series' lead observation facet (see SpecObservations), plus the points of the same source's estimates continuing the series past the lead's last period when it has any -- the `modelled_values` departure marks those -- filtered to the spec's requested window when one exists; the full in-window series when SpecObservations.truncated is false, else at most the latest points (bounded by the server's preview-points setting and its per-series row limit)" + }, + "total_obs": { + "type": "integer", + "title": "Total Obs", + "description": "this series' SELECTED facet's in-window point count (before truncation) -- a per-series figure alongside SpecObservations.total_obs's aggregate across every series. For a scope-defaulted bulk latest-only series (no requested window), this is the coverage probe's all-time obs_count for that entity's selected facet -- the in-window count too, since no window narrows it" + }, + "source_refs": { + "items": { + "$ref": "#/components/schemas/ProvenanceRef" + }, + "type": "array", + "title": "Source Refs", + "description": "provenance of the lead observation facet these points were read from (the facet selected for this series -- see SpecObservations)" + }, + "facet": { + "additionalProperties": { + "$ref": "#/components/schemas/SeriesFacetRef" + }, + "type": "object", + "title": "Facet", + "description": "this series' lead observation facet, per axis (provenance/measurementMethod/unit); the estimates continuing the series keep the lead's entry; sparse -- an axis the facet carries no value for is absent, never a null placeholder. provenance here always agrees with source_refs, since both derive from the same lead facet" + }, + "conversion": { + "anyOf": [ + { + "$ref": "#/components/schemas/ObservationSeriesConversion" + }, + { + "type": "null" + } + ], + "description": "what recipe and tables converted this series' points to the requested currency; absent on a series served in its native facet" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "stat_var", + "entities", + "points", + "total_obs" + ], + "title": "ObservationSeries", + "description": "One (stat_var, role tuple) pair's observation points, in chronological order." + }, + "ObservationSeriesConversion": { + "properties": { + "recipe_id": { + "type": "string", + "title": "Recipe Id", + "description": "the ConversionRecipe.recipe_id that produced these points" + }, + "table_provenance": { + "$ref": "#/components/schemas/SeriesFacetRef", + "description": "the Provenance node both the exchange-rate and (when present) deflator tables loaded under" + }, + "exchange_rate_table_version": { + "type": "string", + "title": "Exchange Rate Table Version", + "description": "the exchange-rate table's own version" + }, + "deflator_table_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Deflator Table Version", + "description": "the deflator table's own version; absent for a current-prices conversion" + }, + "fallback_count": { + "type": "integer", + "title": "Fallback Count", + "description": "rows whose deflator-role entity was substituted with the recipe's fallback entity" + }, + "fallback_examples": { + "items": { + "$ref": "#/components/schemas/SeriesConversionFallbackExample" + }, + "type": "array", + "title": "Fallback Examples", + "description": "a capped, sorted sample of the substituted (entity, fallback_entity) pairs" + }, + "projected_count": { + "type": "integer", + "title": "Projected Count", + "description": "rows whose rate/deflator term was sourced from a projected table row" + }, + "projected_examples": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Projected Examples", + "description": "a capped, sorted sample of the affected 'entity@year' keys" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "recipe_id", + "table_provenance", + "exchange_rate_table_version", + "fallback_count", + "projected_count" + ], + "title": "ObservationSeriesConversion", + "description": "What produced a converted series' points: the recipe and table\nversions, and the fallback/projected markers a caller reads off them.\nModelled on materialise.convert.ConversionRecord, whose own docstring\nthis field's members mirror. Omits ConversionRecord.native_currency:\na caller trusting or reproducing the number needs what recipe and\ntables produced it, not what currency it started from -- facet.unit\nalready names the currency the points are actually in." + }, + "ObservationsOmission": { + "properties": { + "reason": { + "type": "string", + "enum": [ + "observations_timed_out", + "observations_no_matching_source", + "observations_windowed_scope_unsupported", + "observations_converted_scope_unsupported", + "observations_no_dispatchable_facet", + "observations_bulk_fetch_failed", + "observations_probe_failed", + "observations_preview_too_large", + "observations_nothing_to_probe", + "observations_clients_unavailable", + "observations_no_points" + ], + "title": "Reason", + "description": "machine-readable cause, equal to the accompanying Warning's code when one fires" + }, + "message": { + "type": "string", + "title": "Message", + "description": "human-readable explanation, safe to render directly" + }, + "pairs": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Pairs", + "description": "observations_preview_too_large only: the count that was too large" + }, + "cap": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Cap", + "description": "observations_preview_too_large only: the ceiling it exceeded" + }, + "dispatched": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Dispatched", + "description": "observations_no_points/observations_probe_failed/observations_no_matching_source/observations_timed_out: pairs actually dispatched" + }, + "empty": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Empty", + "description": "observations_no_points only: dispatched pairs that carried no data on their own facet" + }, + "hard_failed": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Hard Failed", + "description": "observations_no_points (always 0) and observations_probe_failed: dispatched pairs whose fetch itself failed" + }, + "facet_rejected": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Facet Rejected", + "description": "observations_no_points (always 0) and observations_no_matching_source: dispatched pairs a bound facet_filter rejected" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "reason", + "message" + ], + "title": "ObservationsOmission", + "description": "Why a SpecObservations payload carries no series, made unconditional:\nevery _fetch_observations call that reaches a \"nothing to show\" outcome\nsets this field instead of leaving the whole payload absent, so a client\nis never left guessing which of at least a dozen distinct causes\nproduced an empty preview.\n\nreason is a warning code from search.engine.region.codes (see\nObservationsOmissionReason's own docstring for the closed vocabulary and\nwhy it is duplicated here rather than imported) -- the SAME code the\naccompanying Warning carries when one is also emitted, so a client reads\none vocabulary rather than two. Not every reason accompanies a Warning:\na genuinely uninteresting omission (nothing was ever there to probe)\ncarries no diagnostic Warning of its own, but always carries this field.\n\nThe converse also holds, and the pairing is not exhaustive: a reason\narriving as a bare Warning with `omitted` absent means partial coverage,\nnot absence -- a fetch that delivered some series would never set this\nfield, but can warn (`observations_probe_failed` on a partially hard-\nfailed fetch, and `observations_timed_out` on one some of whose pairs\ncrossed the deadline).\n\nWhenever `omitted` is set, SpecObservations.series is `[]`, total_obs is\n`0`, and truncated is `false`, so a client reading `series ?? []` and\nignoring `omitted` sees an ordinary empty result, with no schema_version\nbump needed to stay compatible.\n\npairs/cap: populated only for reason==\"observations_preview_too_large\" --\nthe (stat_var, role_tuple) pair (or pair x elected-combination\ndispatch-item, or distinct-stat_var) count that was compared against the\nceiling it crossed, and that ceiling itself. Lets a client render \"this\nselection has {pairs} series, above the {cap} the preview fetches\"\nwithout re-deriving either number.\n\ndispatched: how many (stat_var, role_tuple) pairs this call actually\ndispatched. Populated for reason==\"observations_no_points\",\n\"observations_probe_failed\", \"observations_no_matching_source\", and\n\"observations_timed_out\" -- every reason a dispatch actually happened\nfor; None for a reason reached before dispatch (e.g.\n\"observations_nothing_to_probe\").\n\nempty: dispatched pairs that carried no data on their own facet.\nPopulated only for reason==\"observations_no_points\".\n\nhard_failed: dispatched pairs whose fetch itself failed. Populated for\nreason==\"observations_no_points\" (always 0 there -- a nonzero count\nmeans reason is \"observations_probe_failed\" instead) and for\n\"observations_probe_failed\" itself (the nonzero count that produced\nthat reason); None elsewhere.\n\nfacet_rejected: dispatched pairs a bound facet_filter (or currency\nconversion) rejected. Populated for reason==\"observations_no_points\"\n(always 0 there -- a nonzero count means reason is\n\"observations_no_matching_source\" instead) and for\n\"observations_no_matching_source\" itself; None elsewhere.\n\nEvery field left None where the branch that produced this omission has\nno meaningful count for it." + }, + "OpenAxisValueCount": { + "properties": { + "value": { + "$ref": "#/components/schemas/GraphRef", + "description": "the declared value" + }, + "count": { + "type": "integer", + "title": "Count", + "description": "how many distinct served members declare this value" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "value", + "count" + ], + "title": "OpenAxisValueCount", + "description": "One declared value on an open constraint axis and how many served members\ndeclare it (see OpenConstraintAxisFact.values)." + }, + "OpenConstraintAxisFact": { + "properties": { + "property": { + "type": "string", + "title": "Property", + "description": "the constraint property dcid this fact is about" + }, + "varies": { + "type": "boolean", + "title": "Varies", + "description": "False when every served member that declares a value for this axis declares the same one (including when none of them declare one at all, since declaring nothing is itself an agreeing value here, the same rule resolved.alternative_measures' own observed-partition read applies); True when they differ" + }, + "value": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the single value every served member that declares one for this axis agrees on; present only when varies is False and at least one member declares a value, absent when varies is True or every member declares nothing" + }, + "distinct_count": { + "type": "integer", + "title": "Distinct Count", + "description": "how many distinct declared values the served members actually exhibit for this axis, not counting a member that declares nothing. 0 when every member declares nothing, 1 when varies is False and value is set. Counted over the served members' own declarations, independent of this response's observation window: a query's applied when-slot narrows which observation points are returned, not which constraint values a member declares, so this count is never scoped to that window the way an observation-count field on this contract is" + }, + "undeclared_count": { + "type": "integer", + "title": "Undeclared Count", + "description": "how many served members declare no value at all for this axis. A member whose arc names the axis but never resolved to a dcid counts here too, the same as a member that never asserted the axis at all" + }, + "values": { + "items": { + "$ref": "#/components/schemas/OpenAxisValueCount" + }, + "type": "array", + "title": "Values", + "description": "every declared value with the number of served members declaring it, highest count first, then by dcid. Each served StatVar counts once, also after a merge of answers that serve it more than once, so the counts plus undeclared_count sum to the distinct served members. Labels as for value" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "property", + "varies", + "distinct_count", + "undeclared_count" + ], + "title": "OpenConstraintAxisFact", + "description": "One constraint axis the query left open, and what this Spec's own\nserved StatVar members exhibit on it (see ResolvedSpec.open_axis_facts):\nwhether they agree on a single declared value or differ, what that\nagreed value is when one exists, how many distinct values the axis\nactually served, and how many declare none at all." + }, + "Operation": { + "properties": { + "verb": { + "type": "string", + "enum": [ + "rank", + "aggregate", + "growth", + "share_of", + "explain", + "forecast", + "report" + ], + "title": "Verb", + "description": "what the question asks to compute: rank, aggregate, growth, share_of, explain, forecast, or report" + }, + "phrase": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "title": "Phrase", + "description": "the query wording that asks for the operation, e.g. 'top 5 donors'; one line with no control characters or line separators, and not blank" + }, + "over": { + "anyOf": [ + { + "type": "string", + "enum": [ + "place", + "origin", + "destination", + "category", + "year" + ] + }, + { + "type": "null" + } + ], + "title": "Over", + "description": "the axis the operation runs across (place, origin, destination, category, or year); null when the verb names none, as explain does. The part leaves this axis open, so its data covers every value the operation needs" + }, + "target_year": { + "anyOf": [ + { + "type": "integer", + "maximum": 2200.0, + "minimum": 1000.0 + }, + { + "type": "null" + } + ], + "title": "Target Year", + "description": "the year a forecast projects to, e.g. 2050 for 'forecast aid to Ethiopia to 2050'; set only on a forecast, a four-digit year up to 2200. The raw_text door sets it only to a year after the current one, and leaves it null when the question names none; a posted value is taken as given within the bound, whatever today's date. It is kept apart from the part's time_text, the years whose data the part fetches, and does not affect resolution" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "verb", + "phrase" + ], + "title": "Operation", + "description": "One computation the question asks for over a part's data, which search\ndoes not perform: the part answers with the data the operation needs, and\nthe operation rides on the part for a client to perform or hand on." + }, + "OperationEnvelope": { + "properties": { + "operation_id": { + "type": "string", + "pattern": "^op_", + "title": "Operation Id", + "description": "`op_` plus the SHA-256 of the subject and its sorted member dcids, the origin catalogue build, and the rendering key. A repeat submission with the same identity joins the running operation and returns this id. Synchronous builds coalesce per API instance only." + }, + "status": { + "type": "string", + "enum": [ + "pending", + "running", + "done", + "failed" + ], + "title": "Status" + }, + "poll": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Poll" + }, + "retry_after_ms": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Retry After Ms", + "description": "Milliseconds to wait before the next poll. Present on the 202 submit response and on every pending or running poll. Absent on a done poll. It grows as the build runs, at a quarter of the time since the operation's current submission, from 1,500 to 8,000. The `Retry-After` response header carries the same value in whole seconds, rounded up." + }, + "progress": { + "anyOf": [ + { + "$ref": "#/components/schemas/OperationProgress" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "operation_id", + "status" + ], + "title": "OperationEnvelope" + }, + "OperationProgress": { + "properties": { + "rows_written": { + "type": "integer", + "title": "Rows Written" + }, + "estimate_rows": { + "type": "integer", + "title": "Estimate Rows" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "rows_written", + "estimate_rows" + ], + "title": "OperationProgress", + "description": "`rows_written` against `estimate_rows`, read live off\n`datasets.operation` at poll time (`datasets_api.operation_store\n.Operation`). Present on a `pending`/`running` operation's own\nenvelope; omitted from the `202` submit envelope (nothing has run\nyet) and from a terminal (`done`/`failed`) operation's own envelope,\nwhose outcome the sibling `manifest` field, or the poll route's own\n`operation_failed` refusal, already carries in full." + }, + "OperationResource": { + "$id": "https://schemas.dfo.one.org/datasets/v1/operation-resource.json", + "properties": { + "operation": { + "$ref": "#/components/schemas/OperationEnvelope" + }, + "manifest": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Manifest" + }, + "error": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Error" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "operation" + ], + "title": "OperationResource", + "description": "`GET /api/datasets/operations/{operation_id}`'s poll response. The\ncapability document reports `operation_envelope_active: true`, and this\nis the shape the route returns for a known operation id in `pending`,\n`running`, or `done` state. A `failed` operation raises the platform's\nordinary refusal path instead (`operation_failed`), and an unknown or\nunauthorized-`done` id answers 404 `operation_not_found` -- neither\nreturns this shape.\n\n`manifest` is set only once `operation.status == \"done\"`: the same\nmanifest a synchronous mint returns, read at poll time\n(`datasets_api.doors.meta`'s operations route reuses `datasets_api\n.doors.snapshot.read_snapshot_manifest` against the operation's own\nstored `subject_id`/`content_version`). `error` models a `failed`\noperation's outcome inline with this resource's own shape, but the\ndoor never populates it: a `failed` operation raises the platform's\nordinary refusal path instead (`operation_failed`, a bare RFC 9457\nbody, the same pattern `operation_not_found` already uses on this\nroute -- see the registry's own `datasets.operations` mapping), so a\npoll never reaches this model at all once the underlying operation\nhas failed. `error` stays declared for schema completeness -- this is\na contract-stable, immutable-`$id` shape -- but no code path fills it." + }, + "OptionsEnvelope": { + "properties": { + "schema_version": { + "type": "integer", + "title": "Schema Version", + "default": 1 + }, + "definition": { + "$ref": "#/components/schemas/DefinitionModel" + }, + "content_version": { + "type": "string", + "title": "Content Version" + }, + "coverage": { + "$ref": "#/components/schemas/CoverageModel" + }, + "output_options": { + "anyOf": [ + { + "$ref": "#/components/schemas/OutputOptionsModel" + }, + { + "type": "null" + } + ] + }, + "warnings": { + "items": { + "$ref": "#/components/schemas/WarningModel" + }, + "type": "array", + "title": "Warnings" + }, + "trace": { + "additionalProperties": true, + "type": "object", + "title": "Trace" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "definition", + "content_version", + "coverage", + "trace" + ], + "title": "OptionsEnvelope", + "description": "`GET /api/datasets/{id}/options`'s response. It is the projection\nof a materialising door's manifest onto the fields this route's callers\nneed (content_version, coverage, output_options, warnings, trace). The\nroute serves with no rendering (`doors.definition._serve_spec_options`),\nso no reshape runs and `warnings` here excludes reshape-level warnings\nsuch as `enrichment_unavailable`." + }, + "OptionsFor": { + "properties": { + "role": { + "type": "string", + "title": "Role", + "description": "the resolved entity role to enumerate candidates for (e.g. 'origin', 'destination', 'observationAbout' -- the vocabulary is derived per family, not frozen here). Deliberately a plain str, NEVER a Literal or enum: the target is checked only AFTER the posted identity resolves to StatVars, refusing option_target_invalid (422) for a role the resolved family does not carry. A Literal/enum would instead refuse an unrecognised role at the pydantic validation layer as request_invalid (400), before resolution ever runs -- do not tighten this to an enum." + }, + "scope": { + "anyOf": [ + { + "type": "string", + "enum": [ + "peers", + "children" + ] + }, + { + "type": "null" + } + ], + "title": "Scope", + "description": "which candidate universe to enumerate for a role whose options are derived from the graph rather than a curated list; absent means 'peers'. 'peers' enumerates entities sharing the bound entity's own type; 'children' enumerates entities contained in it. Roles backed by a curated candidate list ignore this member, having only one universe to draw from. Naming a role alone cannot distinguish the two readings -- peers of a country and the regions within it are both 'options for observationAbout' -- and only the peers reading is recoverable from the identity, so without this member the contained-in reading is unreachable rather than merely unrequested." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "role" + ], + "title": "OptionsFor", + "description": "Which resolved entity role the options door enumerates candidates for.\n\nWrapped in its own object (rather than a bare string field) so the wire\nbody reads `\"for\": {\"role\": \"destination\"}`, matching the contract's\nenvelope shape on both the request and the echoed response." + }, + "OptionsRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract version the caller targets", + "default": 1 + }, + "identity": { + "$ref": "#/components/schemas/BaseIdentity", + "description": "the identity to resolve and enumerate candidate options for" + }, + "for": { + "$ref": "#/components/schemas/OptionsFor", + "description": "which resolved entity role to enumerate candidate options for" + }, + "include_coverage": { + "type": "boolean", + "title": "Include Coverage", + "description": "when true, the engine probes each returned option for observation coverage (e.g. 'Kenya — 205 obs') and populates SlotOption.coverage; false (the default) never fires the extra probe, so this is opt-in latency, not a hidden cost on the hot path. The only resolution option this door reads -- unlike /resolve's ResolveOptions, this door has no candidate cap or sentence concept, so it carries this one field directly rather than nesting a response_options object with members it would never use.", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "identity", + "for" + ], + "title": "OptionsRequest", + "description": "Request body for the options door (POST /api/search/options): enumerate\nthe candidate set for one resolved entity role of a posted identity.\n\nAn identity block only. The door derives the identity's own StatVar\npopulation server-side (engine.options.population.options_population)\nrather than resolving a Spec through the resubmit path.\n\nvalidate_by_name=False (with validate_by_alias=True, the pydantic default\npairing made explicit here): the published schema declares only the alias\n`for`, and this model is otherwise extra=\"forbid\", so a wire body must be\nrejected for posting the internal Python attribute name `for_` instead --\naccepting both would let a client bypass the declared schema through the\nimplementation-detail spelling. `for_` exists only because `for` is a\nPython reserved word and cannot itself be an attribute name; every\nconstructor call (internal code, tests) builds this model through the\nalias instead, e.g. ``OptionsRequest(identity=..., **{\"for\": OptionsFor(...)})``." + }, + "OptionsResponse": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1", + "default": 1 + }, + "diagnostics": { + "$ref": "#/components/schemas/Diagnostics", + "description": "run health, warnings, timing, build stamp" + }, + "for": { + "$ref": "#/components/schemas/OptionsFor", + "description": "the role this response's options were enumerated for, echoed back from the request" + }, + "options": { + "$ref": "#/components/schemas/OptionsSet", + "description": "the enumerated candidate set" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "diagnostics", + "for", + "options" + ], + "title": "OptionsResponse", + "description": "Response for POST /api/search/options: `{schema_version, diagnostics,\nfor, options}`. Carries no semantic status: the door either refuses\n(through the same shared identity validation a dataset_resubmit identity\nentry runs) or returns options -- possibly an empty\nlist -- with no definite/candidates/no_data three-way to report on top.\n\nOmits graph_revision: no revision concept exists anywhere in src/ --\nnothing tracks the graph the way engine_build tracks the code build -- so\nstamping one here would assert a graph fact this deployment cannot back.\nLeft out deliberately rather than filled with something untrue." + }, + "OptionsSet": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/SlotOption" + }, + "type": "array", + "title": "Items", + "description": "candidate values, deterministically ordered; a dcid that failed to resolve a label is omitted rather than fabricated" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "true when items was capped before every candidate could be checked" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "items", + "truncated" + ], + "title": "OptionsSet", + "description": "The enumerated candidate set an options-door request returns.\n\nItems reuse SlotOption for shape parity with slot_options/entity_options\n({value, coverage}) rather than a simpler {ref, label, obs_count} shape --\nthe richer coverage form is what the engine already serves. An\nempty list is itself a valid result (e.g. the current recipient's\nvariable truly has no other recipient with data), not an error.\n\nCarries no graph_revision -- see OptionsResponse's docstring for why." + }, + "OrganisationNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "organisation", + "title": "Kind", + "default": "organisation" + }, + "organisation": { + "$ref": "#/components/schemas/PartyBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "organisation" + ], + "title": "OrganisationNode" + }, + "OtherNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "other", + "title": "Kind", + "default": "other" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind" + ], + "title": "OtherNode", + "description": "A node no other kind fits. `types` and `description` carry what the graph holds." + }, + "OutputOptionsModel": { + "properties": { + "capability_version": { + "type": "string", + "title": "Capability Version" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/ColumnOptionModel" + }, + "type": "array", + "title": "Columns" + }, + "formats": { + "items": { + "$ref": "#/components/schemas/FormatOptionModel" + }, + "type": "array", + "title": "Formats" + }, + "bundle": { + "$ref": "#/components/schemas/BundleOptionModel" + }, + "enrichments": { + "items": { + "$ref": "#/components/schemas/EnrichmentOptionModel" + }, + "type": "array", + "title": "Enrichments" + }, + "long_layout_defaults": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Long Layout Defaults", + "description": "the enrichment tokens a long-layout download writes with no columns option, in column order: every role's {role}_label, and {role}_party_kind for every role on a flow axis. Naming one in columns gives the same column once" + }, + "long_layout_totals": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Long Layout Totals", + "description": "the roles whose total rows ({role}_party_kind is total) a long-layout CSV or XLSX download keeps out of its main table. A role is listed when the definition binds it to several entities one of which the code index declares a total, or leaves it open and the code index lists a total on its axis in a dataset the definition read (any dataset, when the read selected none). A role bound to several parties holds no total row and is not listed. A bundle's CSV writes those rows to a second data file, data/-totals.csv; an XLSX writes them on a second sheet, totals. A bare CSV has no README and drops them, so this list names the roles whose totals it drops. Parquet, a pivot and the frame layout keep every row. Empty when no role can hold a total row" + }, + "pivots": { + "items": { + "$ref": "#/components/schemas/PivotOptionModel" + }, + "type": "array", + "title": "Pivots" + }, + "groupby": { + "$ref": "#/components/schemas/GroupbyOptionsModel" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "capability_version", + "columns", + "formats", + "bundle", + "enrichments", + "long_layout_defaults", + "long_layout_totals", + "pivots", + "groupby" + ], + "title": "OutputOptionsModel", + "description": "The reshape options this frame supports, joined from its stored\n`materialise.profile.OutputProfile` and the current capability\ndocument." + }, + "ParsedEntity": { + "properties": { + "text": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "title": "Text", + "description": "the entity's text as the caller identified it" + }, + "role_text": { + "anyOf": [ + { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Role Text", + "description": "the caller's free-form role hint for this entity, when available; recognised words (case-insensitive) are 'from'/'to' and synonyms such as donor/provider/funder/source/creditor/lender/exporter for the 'from' side, recipient/beneficiary/debtor/borrower/importer for the 'to' side -- unrecognised text warns role_text_not_recognised and the entity is treated as undirected" + }, + "dcid": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Dcid", + "description": "an optional caller-pinned dcid for this entity, naming exactly which graph node `text` refers to -- the door a client with a candidate's dcid in hand (e.g. from NoData.ambiguous_entities) posts through, instead of relying on name resolution to disambiguate `text` on its own. When present, this entity's name resolution is skipped: the pinned dcid seeds the entry's pre_resolved map directly, still confirmed against the graph. An unconfirmable dcid (absent from the graph, or present but type-less) refuses invalid_role_ref (422). `text` stays required and is not re-derived from the dcid; it is still what a rendered sentence and any further restatement echo back." + }, + "members": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Members", + "description": "true asks for the members of the set `text` names, each as its own series: the countries of a continent or UN subregion, or the members of a group. It has no effect on a single place. Text whose wording names members, such as 'EU member states', reads as true without the flag. With a pinned `dcid` it is honoured for a continent or subregion that the membership policy holds or omits, whatever the node's graph type, and refuses request_invalid for a group's own node, whose members a pin cannot supply. One part names a set once: the same `text` posted with both values refuses request_invalid" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text" + ], + "title": "ParsedEntity", + "description": "One entity mentioned in a parsed part, with an optional caller-supplied role hint." + }, + "ParsedInput": { + "properties": { + "kind": { + "type": "string", + "const": "parsed", + "title": "Kind", + "description": "discriminator for pre-parsed input", + "default": "parsed" + }, + "parts": { + "items": { + "$ref": "#/components/schemas/ParsedPart" + }, + "type": "array", + "maxItems": 6, + "minItems": 1, + "title": "Parts", + "description": "one entry per variable ask; conjunctions pre-split by the caller. Parts that are byte-identical across every field collapse to one before resolution, so the response's own parts list can hold fewer entries than this list." + }, + "raw_query": { + "anyOf": [ + { + "type": "string", + "maxLength": 2000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Raw Query", + "description": "original query text, for echo only; does not affect resolution" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "parts" + ], + "title": "ParsedInput", + "description": "Pre-parsed input: one or more variable parts supplied directly by the caller,\nskipping natural-language extraction." + }, + "ParsedPart": { + "properties": { + "variable_text": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "title": "Variable Text", + "description": "the variable's text as the caller identified it" + }, + "entities": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ParsedEntity" + }, + "type": "array", + "maxItems": 16 + }, + { + "type": "null" + } + ], + "title": "Entities", + "description": "entities associated with this part's variable, when available; null, omitted, or an empty list all mean no entity was named for this part, resolving the variable globally/entity-less -- the same meaning a raw_text query with no extracted place carries" + }, + "time_text": { + "anyOf": [ + { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Time Text", + "description": "this part's time expression, when available; recognised forms include a bare four-digit year, 'YYYY to YYYY' or 'YYYY-YYYY', 'from YYYY to YYYY', 'between YYYY and YYYY', a latest end as in 'between YYYY and the latest' or 'YYYY to latest', 'since YYYY', 'latest', 'latest year available', 'most recent', and 'last N years'. Anything else resolves dateless with a time_text_not_parsed warning, whose message lists every form" + }, + "unit_text": { + "anyOf": [ + { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Unit Text", + "description": "this part's requested unit or measurement basis, when available; recognised phrasing names a currency (ISO 4217 code or curated name/alias), a price basis (current or constant prices), and/or a base year (e.g. '2015 US dollars', 'constant prices, 2015 base year'). A phrase this text failed to parse cleanly resolves no_data with unit_not_resolved; a phrase the request grammar cannot express at all resolves unsupported with unit_request_unsupported. A phrase the grammar CAN express is checked against this deployment's own unit data: a currency/prices/base_year combination no unit this deployment carries expresses at all resolves unsupported with facet_binding_unsupported; one this deployment can express but that matches no candidate observation resolves no_data with facet_not_available; a match resolves definite, applying the completed request to the resolved spec's identity and carrying request_basis on resolved.facets.unit" + }, + "sources": { + "items": { + "$ref": "#/components/schemas/SourceMention" + }, + "type": "array", + "maxItems": 8, + "title": "Sources", + "description": "the data sources this part names or excludes, in query order. Empty, the part answers from the sources the engine elects. A restatement echoes each mention with the reference it resolved to" + }, + "source_text": { + "anyOf": [ + { + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Source Text", + "description": "deprecated: post `sources` instead. Read as one included mention with this text, appended to `sources`" + }, + "provenance": { + "anyOf": [ + { + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Provenance", + "description": "deprecated: post `sources` instead. Read as one included mention with this ref, appended to `sources`. The served request schema lists the code index's declared datasets under this field, each with its label, description and opt-in flag" + }, + "source_code": { + "anyOf": [ + { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Source Code", + "description": "a publisher's own series code for this part's variable, such as the World Bank's DT.TDS.DEGG.CD, when the user or a skill gives one. Compared upper-cased, it names the variables the publisher gives that code, and the part answers from them in place of matching variable_text; variable_text, entities and open_roles still choose among them. A code is never a constraint and narrows nothing else. A code whose variables cannot answer the part, because no source search serves holds it, the part's sources leave out every source holding it, or its variables cannot answer the part as asked, resolves no_data with source_code_not_held, its message naming the cause; a code two of the part's sources hold resolves no_data with source_code_ambiguous until `sources` names one; a code whose variable another code of its source also names resolves no_data with source_code_shares_variable, naming those codes" + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "maxItems": 8, + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + }, + "open_roles": { + "anyOf": [ + { + "items": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "type": "array", + "maxItems": 2 + }, + { + "type": "null" + } + ], + "title": "Open Roles", + "description": "the roles this part asks for member by member, at most one word per flow axis, e.g. ['creditor'] for 'debt service paid to each creditor'. Each is a role_text word: creditor, donor, recipient, debtor, origin, destination, or a synonym. Where the answer's family declares the role, the answer holds one series per member of it and its identity states the axis in open_roles; a role named in neither entities nor open_roles reads as the total over that role. An unrecognised word, or a role one of this part's entities binds through role_text, refuses request_invalid. An operation whose over is origin or destination opens that axis too" + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part is asked beside the others to be compared with them, as in 'health ODA versus education ODA': it answers as its own part and never folds into another part of the same shape (binding_folded). False, the default, folds parts that share a shape into one set answer. Two parts marked separate that resolve to one reading carry the same spec_id and stay two parts", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "variable_text" + ], + "title": "ParsedPart", + "description": "One variable ask within a parsed request, with its own entities, time, unit, and source." + }, + "PartyBlock": { + "properties": { + "roles": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Roles", + "description": "the role properties a node of these types can fill, by the role ranges the graph declares (rangeIncludes and its subClassOf closure); null when that read failed" + } + }, + "type": "object", + "required": [ + "roles" + ], + "title": "GraphPartyBlock", + "description": "An organisation's or aggregate's detail block." + }, + "PeriodCoverage": { + "properties": { + "period": { + "type": "string", + "maxLength": 32, + "minLength": 1, + "title": "Period" + }, + "entities": { + "type": "integer", + "minimum": 0.0, + "title": "Entities" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "period", + "entities" + ], + "title": "PeriodCoverage", + "description": "How many entities one period's total covers." + }, + "PinRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1", + "default": 1 + }, + "artifact_digest": { + "type": "string", + "pattern": "^sha256:", + "title": "Artifact Digest", + "description": "the exact bytes to pin, e.g. 'sha256:3e7a...'" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "artifact_digest" + ], + "title": "PinRequest" + }, + "PinResponse": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "pinned": { + "$ref": "#/components/schemas/PinnedCoordinates" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "pinned" + ], + "title": "PinResponse" + }, + "PinnedCoordinates": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "the spec_id from the path" + }, + "content_version": { + "type": "string", + "title": "Content Version" + }, + "artifact_digest": { + "type": "string", + "title": "Artifact Digest" + }, + "pinned_at": { + "type": "string", + "title": "Pinned At" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "content_version", + "artifact_digest", + "pinned_at" + ], + "title": "PinnedCoordinates" + }, + "PivotOptionModel": { + "properties": { + "index": { + "type": "string", + "title": "Index" + }, + "columns": { + "type": "string", + "title": "Columns" + }, + "state": { + "type": "string", + "title": "State" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reason" + }, + "varying": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/VaryingColumnModel" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Varying" + }, + "width": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Width" + }, + "cells": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Cells" + }, + "unavailable_formats": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/UnavailableFormatModel" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Unavailable Formats" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "index", + "columns", + "state" + ], + "title": "PivotOptionModel", + "description": "One ordered `(index, columns)` pivot pair. `varying` is populated\nfor a `pivot_not_unique` refusal caused by a duplicate key group. A\nstringification collision, where distinct `columns` values share an\noutput column name, is also `unavailable` as `pivot_not_unique`, with\nno `varying` since no duplicate key group exists. `width` and `cells`\nare populated only when the pair is feasible." + }, + "PivotOptions": { + "properties": { + "index": { + "type": "string", + "minLength": 1, + "title": "Index" + }, + "columns": { + "type": "string", + "minLength": 1, + "title": "Columns" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "index", + "columns" + ], + "title": "PivotOptions", + "description": "`options.pivot`: long-to-wide, `index` and `columns` each naming\nexactly one column." + }, + "PlaceBlock": { + "properties": { + "contained_in": { + "items": { + "$ref": "#/components/schemas/NodeRef" + }, + "type": "array", + "title": "Contained In", + "description": "the containedInPlace targets" + }, + "membership": { + "anyOf": [ + { + "$ref": "#/components/schemas/MembershipBlock" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "contained_in", + "membership" + ], + "title": "GraphPlaceBlock", + "description": "A place's detail block. `membership` is set for a region the membership policy holds." + }, + "PlaceCounts": { + "properties": { + "publishers": { + "type": "integer", + "title": "Publishers", + "description": "distinct sources with data at the country" + }, + "variables": { + "type": "integer", + "title": "Variables", + "description": "distinct StatVars with data at the country" + }, + "aid": { + "$ref": "#/components/schemas/AidCounts" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "publishers", + "variables", + "aid" + ], + "title": "PlaceCounts", + "description": "What DFO holds at one country. For aid, `donors` counts the donors to\nthe country and `recipients` the recipients of its own aid." + }, + "PlaceOtherNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "place_other", + "title": "Kind", + "default": "place_other" + }, + "place_other": { + "$ref": "#/components/schemas/PlaceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "place_other" + ], + "title": "PlaceOtherNode" + }, + "PriceBasisWords": { + "properties": { + "prices": { + "type": "string", + "enum": [ + "current", + "constant" + ], + "title": "Prices" + }, + "base_year": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Base Year" + } + }, + "type": "object", + "required": [ + "prices", + "base_year" + ], + "title": "GraphPriceBasis", + "description": "Current or constant prices, with the base year of constant prices when known." + }, + "Projection": { + "type": "string", + "enum": [ + "countries", + "other_states", + "territories", + "former_states", + "institutions" + ], + "title": "Projection", + "description": "A named cut of a membership by member class." + }, + "ProjectionCount": { + "properties": { + "projection": { + "$ref": "#/components/schemas/Projection" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Count", + "description": "members under the projection; null when the authority does not record it" + }, + "complete": { + "type": "boolean", + "title": "Complete", + "description": "false when the authority does not record the projection, or is known to hold it only in part (`membership_incomplete`)" + } + }, + "type": "object", + "required": [ + "projection", + "count", + "complete" + ], + "title": "GraphProjectionCount", + "description": "One projection of a membership and its member count at the block's date." + }, + "ProvenanceEntry": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "string", + "title": "Label" + } + }, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "ProvenanceEntry", + "description": "One admitted provenance: its dcid and the provenance table's name for it." + }, + "ProvenanceNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "provenance", + "title": "Kind", + "default": "provenance" + }, + "provenance": { + "$ref": "#/components/schemas/SourceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "provenance" + ], + "title": "ProvenanceNode" + }, + "ProvenanceRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the graph identifier" + }, + "label": { + "type": "string", + "title": "Label", + "description": "plain-language display name, read from the graph" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/SourceRef" + }, + { + "type": "null" + } + ], + "description": "the organisation behind the provenance" + }, + "data_commons": { + "anyOf": [ + { + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + }, + { + "type": "null" + } + ], + "description": "the Data Commons the provenance's data comes from" + }, + "documentation": { + "type": "string", + "title": "Documentation", + "description": "the Graph API route of the provenance's document, GET /api/graph/documentation/{dcid}" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "ProvenanceRef", + "description": "A provenance on the wire: its dcid and label, the source behind it, the\nData Commons its data comes from, and the route of its document, which\nfollows from the dcid. `label`, `source` and `data_commons` come from the\norigin catalogue's provenance table. A provenance the table does not list\ncarries its graph label and neither `source` nor `data_commons`, and is\nomitted when the graph has no label for it." + }, + "PublishFrameRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1", + "default": 1 + }, + "spec_id": { + "type": "string", + "pattern": "^ops_[0-9a-f]{6,64}$", + "title": "Spec Id", + "description": "the derived frame's own op-spec hash id, ops_-prefixed" + }, + "content_version": { + "type": "string", + "pattern": "^ocv_[0-9a-f]{6,64}$", + "title": "Content Version", + "description": "the derived frame's own toolkit content version, ocv_-prefixed" + }, + "role_keys": { + "items": { + "type": "string", + "maxLength": 1024 + }, + "type": "array", + "maxItems": 16, + "title": "Role Keys", + "description": "`dfo_frame_grammar.Frame.build`'s own `role_keys` argument; empty is a valid subject-only frame with no role columns, `build_frame` accepts it, so no minimum is imposed here. Bounded at 16 entries, each at most 1024 characters, a schema fact rather than a deployment ceiling -- see this module's own docstring" + }, + "rows": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "additionalProperties": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "additionalProperties": { + "type": "string", + "maxLength": 200, + "pattern": "^dcid:." + }, + "type": "object", + "maxProperties": 1 + }, + { + "additionalProperties": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "type": "object", + "maxProperties": 3 + } + ] + }, + "type": "object", + "maxProperties": 2 + }, + { + "additionalProperties": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "type": "object", + "maxProperties": 3 + }, + { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + ] + }, + "type": "object", + "maxProperties": 22 + }, + "type": "array", + "maxItems": 1000000, + "title": "Rows", + "description": "`dfo_frame_grammar.Frame.build`'s own `rows` argument; empty is a valid frame (an analysis verb whose filter matches nothing produces exactly this), `build_frame` accepts it, so no minimum is imposed here. Each row is bounded at 22 keys; the outer list is bounded at 1000000 rows, a fixed schema backstop, well above doors.publish's own fixed PUBLISH_MAX_ROWS that actually governs `len(rows)` at publish time -- see this module's own docstring for why the two are not the same kind of cap. A cell is a scalar, or under `unit` alone a mapping of scalars bounded at 3 entries or a composed unit, `numerator` over `denominator`, each a unit ref, a mapping of scalars, or `{stat_var}` -- see this module's own docstring for the shapes refused at parse time" + }, + "input_content_versions": { + "items": { + "type": "string", + "pattern": "^(?:cv_[0-9a-f]{32}|ocv_[0-9a-f]{6,64})$" + }, + "type": "array", + "maxItems": 256, + "minItems": 1, + "title": "Input Content Versions", + "description": "every input frame's own frame-grammar content_version this derived frame was computed from. Bounded at 256 entries, a schema fact rather than a deployment ceiling -- see this module's own docstring" + }, + "recipe": { + "anyOf": [ + { + "$ref": "#/components/schemas/Recipe" + }, + { + "type": "null" + } + ], + "description": "the recipe that produced this frame. The door stores it beside the version, outside the body a republish is compared on, so a republish may add one to a frame published without it and may omit one the frame already holds" + }, + "steps": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Step" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Steps", + "description": "the frame's step records, one per operation that computed it, in order, in the shape of dfo-spec-kit's step schema. `op` is any operation name. At most 62 steps and 65536 bytes of canonical JSON; step ids are distinct, an input that names a step names an earlier one, and only a `retrieve` step's `input` names a version, which at least one does. The versions `retrieve` steps name are the frame's root inputs, which `input_content_versions`, the immediate input frames, need not list. Absent when the publish carries none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version", + "role_keys", + "rows", + "input_content_versions" + ], + "title": "PublishFrameRequest" + }, + "PublishFrameResponse": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "published": { + "$ref": "#/components/schemas/PublishedFrameCoordinates" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "published" + ], + "title": "PublishFrameResponse" + }, + "PublishedFrameCoordinates": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id" + }, + "content_version": { + "type": "string", + "title": "Content Version" + }, + "artifact_digest": { + "type": "string", + "title": "Artifact Digest" + }, + "created": { + "type": "boolean", + "title": "Created", + "description": "true when this call newly recorded the version row; false when an identical publish of this exact pair had already been recorded (the idempotent replay path)" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version", + "artifact_digest", + "created" + ], + "title": "PublishedFrameCoordinates" + }, + "QueryEcho": { + "properties": { + "entry_path": { + "type": "string", + "enum": [ + "raw_text", + "parsed", + "dataset_resubmit" + ], + "title": "Entry Path", + "description": "which input was used" + }, + "raw_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Raw Query", + "description": "the original query text, when one was supplied" + }, + "normalized_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Normalized Query", + "description": "normalised query text, when extraction ran" + }, + "extract_skipped": { + "type": "boolean", + "title": "Extract Skipped", + "description": "true when the extraction step was skipped for this request" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "entry_path", + "extract_skipped" + ], + "title": "QueryEcho", + "description": "What the response was understood to be answering." + }, + "RawTextInput": { + "properties": { + "kind": { + "type": "string", + "const": "raw_text", + "title": "Kind", + "description": "discriminator for natural-language query input", + "default": "raw_text" + }, + "query": { + "type": "string", + "title": "Query", + "description": "the user's natural-language request" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "query" + ], + "title": "RawTextInput", + "description": "Natural-language query input. The engine extracts, resolves, and grounds it." + }, + "Recipe": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "recipe schema version; exactly 1" + }, + "normal_form_hash": { + "type": "string", + "pattern": "^rnf_[0-9a-f]{32}$", + "title": "Normal Form Hash", + "description": "hash of the recipe's normal form, in which every derived input is replaced by its own recipe, every root by its dataset spec_id and rendering, and every literal a rolling overlay governs is dropped. Two frames replayed from one recipe on different data share it" + }, + "replay_key": { + "type": "string", + "pattern": "^rpk_[0-9a-f]{32}$", + "title": "Replay Key", + "description": "hash of the normal form hash, the root dataset pairs, and the execution identity. It names the one frame replayed from them" + }, + "execution_identity": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "title": "Execution Identity", + "description": "the engine, grammar, and reduction versions that ran the recipe" + }, + "tree": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object", + "title": "Tree", + "description": "the op-spec tree, opaque here; analysis-mcp owns its shape" + }, + "roots": { + "items": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "array", + "title": "Roots", + "description": "how each root dataset was minted, opaque here; analysis-mcp owns its shape" + }, + "anchor": { + "anyOf": [ + { + "$ref": "#/components/schemas/RecipeAnchor" + }, + { + "type": "null" + } + ], + "description": "the rolling anchor, or null for a recipe with no rolling period" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "schema_version", + "normal_form_hash", + "replay_key", + "execution_identity", + "tree", + "roots" + ], + "title": "Recipe" + }, + "RecipeAnchor": { + "properties": { + "period": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "title": "Period", + "description": "a period label at the frame's grain" + }, + "rule": { + "type": "string", + "const": "half1", + "title": "Rule", + "description": "the anchor rule: the newest period at least half of the series hold" + }, + "left_out": { + "items": { + "$ref": "#/components/schemas/RecipeLeftOutSeries" + }, + "type": "array", + "title": "Left Out" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "period", + "rule", + "left_out" + ], + "title": "RecipeAnchor", + "description": "The period a rolling recipe's `latest` resolved to, and the series it left out." + }, + "RecipeLeftOutSeries": { + "properties": { + "root": { + "type": "integer", + "minimum": 0.0, + "title": "Root", + "description": "index of the population the series belongs to, in the order of the recipe's populations: one per root dataset" + }, + "coordinates": { + "additionalProperties": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "type": "object", + "title": "Coordinates", + "description": "the series' dimension values, column name to value. Holds `stat_var` or at least one entity-role column" + }, + "label": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the series' display name. Optional: a reader of the recipe resolves the name from `coordinates` when it is absent" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "root", + "coordinates" + ], + "title": "RecipeLeftOutSeries", + "description": "One series a rolling anchor left out: it holds no row at the anchor period.\n\n`coordinates` must name the series, since a reader labels it from them: they hold\n`stat_var`, or at least one entity-role column, which is any column other than the frame\ngrammar's fixed columns (`stat_var`, `time_period`, `value`, `unit`, `status`) and its\nfacet identity columns (`measurementMethod`, `provenance`). Empty coordinates, and\ncoordinates of only those other columns, are refused." + }, + "RecipeWriteResponse": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id" + }, + "content_version": { + "type": "string", + "title": "Content Version" + }, + "created": { + "type": "boolean", + "title": "Created", + "description": "true when this call stored the recipe; false when the frame already held a recipe with the same normal_form_hash and replay_key" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version", + "created" + ], + "title": "RecipeWriteResponse" + }, + "RefreshFrameRequest": { + "properties": { + "spec_id": { + "type": "string", + "maxLength": 200, + "pattern": "^(?:spec|ops)_[^/\\s]+$", + "title": "Spec Id" + }, + "content_version": { + "type": "string", + "maxLength": 200, + "pattern": "^(?:cv|ocv)_[^/\\s]+$", + "title": "Content Version" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version" + ], + "title": "RefreshFrameRequest", + "description": "The frame to refresh. An `ops_` id is accepted by the grammar and refused\n`frame_not_refreshable`." + }, + "RegisterRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1" + }, + "definition": { + "$ref": "#/components/schemas/CanonicalDefinition", + "description": "the canonical definition to register" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "schema_version", + "definition" + ], + "title": "RegisterRequest", + "description": "`POST /api/datasets/register`'s body: one canonical `definition`.\n`unsupported_schema_version` (the top-level `schema_version` field's own\nrefusal) and any other shape failure surface through the platform's\ngeneric `RequestValidationError` handling." + }, + "RelatedMeasure": { + "properties": { + "stat_var": { + "$ref": "#/components/schemas/GraphRef", + "description": "the StatVar this measure reads, labelled with its graph name, or its dcid when it has none" + }, + "definition": { + "$ref": "#/components/schemas/SpecDefinition", + "description": "the measure's own {schema_version, spec_id, identity}" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "stat_var", + "definition" + ], + "title": "RelatedMeasure", + "description": "One other StatVar from the StatVarGroup this Spec's one StatVar belongs to (see\nResolvedSpec.related_measures), with data at the Spec's places.\n\n`definition` is minted from the member's own five-tuple and constraint values, with this\nSpec's entities and requested window and no facets, since a unit or source this Spec\npins belongs to its own measure. Post `definition` back as `identity` on a\ndataset_resubmit identity entry to switch onto this measure." + }, + "Relaxation": { + "properties": { + "axis": { + "type": "string", + "enum": [ + "what", + "how", + "where", + "when", + "source" + ], + "title": "Axis", + "description": "the slot axis whose binding was relaxed" + }, + "property_dcid": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Property Dcid", + "description": "the constraint property dcid the relaxed slot carried, when one exists" + }, + "dropped_value_dcids": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Dropped Value Dcids", + "description": "the taxonomy member dcid(s) the relaxed binding dropped" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "axis", + "dropped_value_dcids" + ], + "title": "Relaxation", + "description": "Which definition part a nearest_real suggestion relaxed to find data.\n\nCaptured at the point a constraint binding is dropped and the resulting,\nwidened request is re-confirmed against the live graph (see\nNearestRealSpec). Names the definition part relaxed (axis + the\nconstraint property it carried) and the value(s) it dropped." + }, + "ReleaseDocumentResponse": { + "properties": { + "catalog_version": { + "type": "string", + "title": "Catalog Version", + "description": "the catalogue release this deployment serves" + }, + "schema_version": { + "type": "integer", + "title": "Schema Version", + "description": "the envelope schema version this release resolves against" + }, + "member_types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Member Types", + "description": "every component type this release's catalogue defines" + }, + "constraint_ids": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Constraint Ids", + "description": "every constraint id this release's registry enforces" + }, + "retry_modes": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Retry Modes", + "description": "`retry_modes` is the headline mode per code, and the per-response `retryable` boolean is the authoritative value for every code. `schema_invalid` and `frame_unavailable` vary by cause, and `request_invalid` is always false although its headline mode is `correct_and_retry`." + }, + "envelope_schema": { + "additionalProperties": true, + "type": "object", + "title": "Envelope Schema", + "description": "the envelope JSON Schema this release's assembler validates a minted envelope against; every create/revise/read body's `resolved_payload` conforms to it" + }, + "component_schemas": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object", + "title": "Component Schemas", + "description": "each member type's own component JSON Schema, keyed by member type. `envelope_schema`'s `component` field `$ref`s these schemas by their own `$id`, which otherwise resolves nowhere, so a client validating `resolved_payload` resolves those `$ref`s against this map" + }, + "intent_schemas_tolerant": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object", + "title": "Intent Schemas Tolerant", + "description": "each member type's own tolerant intent schema" + }, + "minimal_intents": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object", + "title": "Minimal Intents", + "description": "each member type's own minimal legal intent" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "catalog_version", + "schema_version", + "member_types", + "constraint_ids", + "retry_modes", + "envelope_schema", + "component_schemas", + "intent_schemas_tolerant", + "minimal_intents" + ], + "title": "ReleaseDocumentResponse", + "description": "`GET /api/presentation/release`'s body. It carries the pinned\ncatalogue release's own identity and the vocabulary a client needs\nto mount tools without a second, out-of-band fetch of the catalogue\nbundle." + }, + "ReleaseModel": { + "properties": { + "date": { + "type": "string", + "title": "Date", + "description": "the release date, YYYY-MM-DD" + }, + "title": { + "type": "string", + "title": "Title", + "description": "the release title, plain text" + }, + "changes": { + "items": { + "$ref": "#/components/schemas/ChangeModel" + }, + "type": "array", + "title": "Changes" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "date", + "title" + ], + "title": "ReleaseModel", + "description": "One release of a source's DFO pipeline." + }, + "RenderBody": { + "properties": { + "frame": { + "$ref": "#/components/schemas/RenderFrame" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "frame" + ], + "title": "RenderBody", + "description": "The frame to draw the revision on." + }, + "RenderFrame": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id" + }, + "content_version": { + "type": "string", + "title": "Content Version" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version" + ], + "title": "RenderFrame" + }, + "ReplayedFrameResponse": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id" + }, + "content_version": { + "type": "string", + "title": "Content Version" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version" + ], + "title": "ReplayedFrameResponse" + }, + "Resolution": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1. Required on every response.", + "default": 1 + }, + "query_echo": { + "$ref": "#/components/schemas/QueryEcho", + "description": "what the response was understood to be answering" + }, + "diagnostics": { + "$ref": "#/components/schemas/Diagnostics", + "description": "run health, warnings, timing, build stamp" + }, + "kind": { + "type": "string", + "const": "resolution", + "title": "Kind", + "description": "discriminator for a response that resolved the question into data", + "default": "resolution" + }, + "parts": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DefinitePart" + }, + { + "$ref": "#/components/schemas/CandidatesPart" + }, + { + "$ref": "#/components/schemas/NoDataPart" + }, + { + "$ref": "#/components/schemas/UnsupportedPart" + } + ], + "discriminator": { + "propertyName": "status", + "mapping": { + "candidates": "#/components/schemas/CandidatesPart", + "definite": "#/components/schemas/DefinitePart", + "no_data": "#/components/schemas/NoDataPart", + "unsupported": "#/components/schemas/UnsupportedPart" + } + } + }, + "type": "array", + "minItems": 1, + "title": "Parts", + "description": "one entry per variable asked, in query order" + }, + "rendered_sentence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Rendered Sentence", + "description": "the envelope-level confirmation sentence describing the whole query, composed across every part's own sentence in query order. When every contributing part is definite, their headings join into one sentence. A qualifier axis (where, when, or source, each a wire value of axis, plus origin, identified by role=='origin' instead since SentenceAxis has no 'origin' member) whose bound value agrees across every contributing part is stated once after the joined phrases, a possessive lead every part shares opens the sentence once, and the byline follows once. A qualifier that differs stays inline in each part's own phrase. The response falls back to one sentence per part, each part's own text left exactly as that part rendered it, when a part is still resolving, when the parts' bylines differ, or when a differing qualifier's connective opens with a comma (a period range). A part still resolving contributes up to three tokens of its own: an optional prefix text token, its own variable_text as an editable slot, and a text token stating the outcome. A lone part that is not definite composes to exactly that part's own sentence. After the headings and bylines, each part's departures follow in part order as segment='departure' tokens carrying that part's part_index. This is the one sentence that writes out a definite part's departures. The parts' assumptions close the sentence as segment='assumption' tokens. A joined sentence takes one clause, each item carrying the part_index of its part and an item two parts share carrying none. A sentence written part by part takes each part's own clause after its departures. There, a part whose sentence and clause both repeat an earlier part's is stated once with it, that sentence and clause carrying no part_index, followed by each part's own departures, and a part whose clause differs keeps its own sentence. On a mixed resolution with at least one definite part, the sentence opens 'Answered N of M parts.', where N counts the definite parts, folded ones included, and M is len(parts)." + }, + "sentence_plan": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentence Plan", + "description": "the ordered token form of rendered_sentence, present under the same condition; null or omitted otherwise. Composed the same way rendered_sentence is, from every part's own sentence_plan -- see SentenceToken.part_index for how a client recovers which parts[i] each variable phrase and attached qualifier belongs to, and which tokens are shared skeleton (an inter-phrase connective, a hoisted shared qualifier, the terminal '.', or the shared ' ' the per-part fallback puts between two sentences) rather than any one part's own. On a mixed resolution with at least one definite part, the plan opens with two segment='coverage' tokens carrying no part_index, 'Answered N of M parts.' and ' '. A mixed resolution with no definite part has no opener." + }, + "skills": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/Skill" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Skills", + "description": "every skill named by any Spec.resolved.skills across this response's parts, keyed by id -- each id any Spec carries is a key here, and each key's front matter is carried once regardless of how many Specs name it. Present under response_options.include_skills; null when the option is off, {} when it is on and no Spec matched anything." + }, + "status": { + "type": "string", + "enum": [ + "definite", + "candidates", + "no_data", + "unsupported", + "mixed" + ], + "title": "Status", + "description": "the parts' shared status when every part agrees, or 'mixed' when two or more parts differ; derived from parts, never independently settable", + "readOnly": true + } + }, + "type": "object", + "required": [ + "query_echo", + "diagnostics", + "parts", + "status", + "kind" + ], + "title": "Resolution", + "description": "A resolve response that resolved the question into data: one part per\nvariable asked, in query order, each a complete outcome carrying its own\nstatus and payload.\n\nA single-variable query is one part, so `status` reads that one part's\nstatus directly. A query in which extraction found no variable is also\none part, whose `variable_text` is the whole query text.\n\n`status` below is a computed field that rides in every serialised\nresponse body without being a settable input, so this class stays a\nplain `BaseModel`, which allows unknown fields. `StrictModel` forbids them,\nwhich would make `Resolution.model_validate` reject its own `model_dump()`\noutput, breaking every round-trip a client or this codebase does on a\nfetched response body. A posted `status` is ignored and recomputed.\n\nUsage::\n\n resp = RESOLVE_RESPONSE_ADAPTER.validate_python(obj)\n if resp.kind == \"resolution\":\n resp.status # \"definite\" | \"candidates\" | \"no_data\" | \"unsupported\" | \"mixed\"\n resp.parts[0].status # this part's own status" + }, + "ResolutionTrace": { + "properties": { + "resolved_entities": { + "items": { + "$ref": "#/components/schemas/GraphRef" + }, + "type": "array", + "title": "Resolved Entities", + "description": "every entity" + }, + "resolved_sources": { + "items": { + "$ref": "#/components/schemas/ProvenanceRef" + }, + "type": "array", + "title": "Resolved Sources", + "description": "every dataset/source (a Data Commons provenance)" + }, + "slot_filters": { + "items": { + "$ref": "#/components/schemas/ResolvedFilter" + }, + "type": "array", + "title": "Slot Filters", + "description": "each applied bind decision, slot by slot" + }, + "query_qualifiers": { + "items": { + "$ref": "#/components/schemas/ResolvedQualifier" + }, + "type": "array", + "title": "Query Qualifiers", + "description": "each narrowing term the request's text named, and what became of it (see ResolvedQualifier). Defaulted empty: a dataset_resubmit identity entry carries no query text to re-derive this from, and every hand-built fixture and same-shape merge that predates this field still validates." + }, + "requested_window": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "string", + "const": "latest" + }, + { + "type": "null" + } + ], + "title": "Requested Window", + "description": "the date window originally requested (query intent), independent of coverage narrowing; None when no date was requested. The literal \"latest\" means the query explicitly asked for the most-recent/current value -- distinct from None (no date signal at all), since a resubmit of a \"latest\" spec must re-resolve to whatever year is CURRENTLY latest, not pin to the year this response happened to resolve. spec_id is anchored on this value, not on the served window, so identity stays stable across a resubmit even when coverage narrows the dates. Preserve the returned Spec.definition.identity when resubmitting; if editing it, carry this value at ResubmitIdentityPayload.identity.requested_window to keep that stability." + }, + "capability_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Capability Version", + "description": "the deployment capability version that produced this Spec, shared verbatim with GET /api/search/capabilities and every problem-details body's own capability_version. None only in hand-built fixtures that predate this field; every engine-produced Spec populates it." + }, + "default_reading": { + "anyOf": [ + { + "$ref": "#/components/schemas/TraceDefaultReading" + }, + { + "type": "null" + } + ], + "description": "what the default price-basis reading did before bind (see TraceDefaultReading); None when no bind ran for this Spec, as on a resubmit, or in hand-built fixtures that predate this field" + }, + "stated_form": { + "anyOf": [ + { + "type": "string", + "enum": [ + "per_person", + "per_head_base", + "per_area", + "rate", + "share" + ] + }, + { + "type": "null" + } + ], + "title": "Stated Form", + "description": "the normalised form the quantity read found in the question when no wording pattern named one (\"debt to GDP\" asks for a rate), and which the answer was then checked against; None when a wording pattern named the form, when the question asks for none, and when no bind ran for this Spec" + }, + "conversion": { + "anyOf": [ + { + "$ref": "#/components/schemas/TraceConversion" + }, + { + "type": "null" + } + ], + "description": "always absent: conversion is recorded per series in resolved.observations.series[].conversion (see TraceConversion)" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "resolved_entities", + "resolved_sources", + "slot_filters" + ], + "title": "ResolutionTrace", + "description": "Consolidated record of how the query was understood." + }, + "ResolveOptions": { + "properties": { + "include_option_coverage": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Include Option Coverage", + "description": "when true, the engine probes each top-level interpretation and candidate Spec's slot_options for observation coverage (e.g. 'Kenya — 205 obs') and populates SlotOption.coverage; false/absent (the default) never fires the extra probes, so this is opt-in latency, not a hidden cost on the hot path. Delivery differs by transport, for every input kind: over SSE (Accept: text/event-stream), coverage arrives via trailing slot_options/entity_options events emitted after the response event, and the response event's own Spec.resolved.slot_options / entity_options stay coverage=null; on the buffered JSON body, coverage is embedded directly in the returned Spec. Spec.resolved.facet_options is computed whether or not this is set; over SSE with this set, it arrives in trailing facet_options events instead of the response event." + }, + "include_observations": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Include Observations", + "description": "when true (the default is false -- absent also means false), the engine populates Spec.resolved.observations with the resolved answer's observation values: the full series when small enough, otherwise a bounded latest-points preview. This per-spec fetch runs only after the engine commits to a definite spec, including a promoted candidate; a multi-candidate response keeps per-candidate metadata and coverage without fetching observations. Delivery mirrors include_option_coverage's transport split: over SSE, observations arrive via a trailing observations event emitted after the response event, and the response event's own Spec.resolved.observations stays null or omitted; on the buffered JSON body, observations are embedded directly in the returned Spec." + }, + "include_skills": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Include Skills", + "description": "when true (the default is false -- absent also means false), the engine matches every resolved Spec's bound graph nodes (its shape's structural anchors and the dcids its bound constraint slots name) and its selected provenance (facets.provenance.ref, when one provenance serves every series) against the shared skills index and populates Spec.resolved.skills with the matching skill ids: skills matched through a graph node first, nearest-attachment-first, then skills matched only through the provenance, by id; [] when nothing matched. The response's own skills map then carries every named skill's front matter once, keyed by id. When the shared skills index has not yet built a first snapshot, the response carries the skills_index_unavailable diagnostics warning instead and no Spec gets a populated skills field; when a snapshot is available but its own build may have left out a published skill or served one excluded or understated (a read stopped at a budget or bound, the build's content budget ran out before a skill's turn, or a build step failed), the response instead carries the skills_index_incomplete diagnostics warning alongside whatever matches it did serve; a part with no resolved spec (no_data, unsupported) carries the part-scoped skills_not_matchable warning, since it binds no graph nodes to match against." + } + }, + "additionalProperties": false, + "type": "object", + "title": "ResolveOptions", + "description": "Optional resolution parameters the caller may supply." + }, + "ResolveResponse": { + "properties": { + "results": { + "items": { + "$ref": "#/components/schemas/ResolveResult" + }, + "type": "array", + "title": "Results" + } + }, + "type": "object", + "required": [ + "results" + ], + "title": "GraphResolveResponse", + "description": "`results` is index-aligned with the request's `texts`." + }, + "ResolveResult": { + "properties": { + "input": { + "type": "string", + "title": "Input" + }, + "status": { + "type": "string", + "enum": [ + "resolved", + "ambiguous", + "not_found", + "not_held" + ], + "title": "Status" + }, + "entity": { + "anyOf": [ + { + "$ref": "#/components/schemas/EntityRef" + }, + { + "type": "null" + } + ] + }, + "matched": { + "anyOf": [ + { + "$ref": "#/components/schemas/Matched" + }, + { + "type": "null" + } + ] + }, + "reading": { + "anyOf": [ + { + "type": "string", + "enum": [ + "members", + "entity" + ] + }, + { + "type": "null" + } + ], + "title": "Reading" + }, + "projection": { + "anyOf": [ + { + "$ref": "#/components/schemas/Projection" + }, + { + "type": "null" + } + ] + }, + "member_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Member Count" + }, + "members": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "$ref": "#/components/schemas/NodeRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Members" + }, + "candidates": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/EntityRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Candidates" + }, + "near_matches": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/EntityRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Near Matches" + } + }, + "type": "object", + "required": [ + "input", + "status", + "entity", + "matched", + "reading", + "projection", + "member_count", + "members", + "candidates", + "near_matches" + ], + "title": "GraphResolveResult", + "description": "One text's outcome. `input` echoes the text; fields a status does not use are `null`.\n\n- `resolved`: `entity`, `matched` and `reading`. A group or region adds `projection`,\n `member_count` and `members`: the list route's link, or the members inline (at most\n 256) when the request expanded them. The three are `null` for a region the membership\n policy does not hold.\n- `ambiguous`: `candidates`, in the resolver's order.\n- `not_found`: `near_matches`, hints for a person; a program should pick none by id.\n- `not_held`: `entity`, the id the resolver named, which does not open on the node route.\n\n`reading` is `members` when the text names a group's members (\"EU countries\"), else\n`entity`." + }, + "ResolvedEntity": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the resolved entity's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "plain-language display name" + }, + "entity_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Entity Type", + "description": "e.g. Country, AdministrativeArea1, Organization" + }, + "role": { + "type": "string", + "enum": [ + "observationAbout", + "origin", + "destination" + ], + "title": "Role", + "description": "the role key this entity plays; observationAbout, origin, or destination" + }, + "confidence": { + "anyOf": [ + { + "type": "string", + "enum": [ + "high", + "medium", + "low" + ] + }, + { + "type": "null" + } + ], + "title": "Confidence", + "description": "the engine's confidence in this entity resolution; None when not assessed -- no entity-resolution confidence signal exists yet, so this ships None on every entity today" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "role" + ], + "title": "ResolvedEntity", + "description": "One resolved entity on the wire, under `resolved.entities`: the flat\nprojection of the engine's own `Entity` -- `ref`/`entity_type` collapse from\na `GraphRef` to a bare dcid/label pair, and `role` collapses from the\nengine's richer role model to the role-key string it already derives from\n(the identity core's own vocabulary, so this never adds a second mapping)." + }, + "ResolvedFacet": { + "properties": { + "basis": { + "type": "string", + "enum": [ + "bound", + "declared_default", + "fallback" + ], + "title": "Basis", + "description": "'bound' when this axis was constrained by the request, 'declared_default' when an unbound axis was completed from a declared deployment policy, 'fallback' when neither applies and the deployment policy supplied the value: facets holding a point in the requested years first, then DFO's facets for a variable both DFO and base Data Commons hold, then the most places or role tuples covered there, then the most requested years the span covers, then most observations, then the latest observation, then a deterministic tie-break" + }, + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ref", + "description": "the axis's resolved dcid, present when one distinct value served every carried series; absent when selection is 'per_series'" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "best-effort display label for ref; present only alongside ref" + }, + "currency": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Z]{3}$" + }, + { + "type": "null" + } + ], + "title": "Currency", + "description": "unit axis only, alongside ref: the ISO 4217 code of the currency ref is denominated in, from the graph's currency units (CurrencyUSD, USDollar and the base Data Commons Currency members such as INR); absent when ref is no currency. The sentence reads it: US dollars go to the byline's unit token, any other currency stays in the heading" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/SourceRef" + }, + { + "type": "null" + } + ], + "description": "provenance axis only, alongside ref: the organisation behind the provenance, from the origin catalogue" + }, + "data_commons": { + "anyOf": [ + { + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + }, + { + "type": "null" + } + ], + "description": "provenance axis only, alongside ref: the Data Commons the provenance's data comes from" + }, + "documentation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Documentation", + "description": "provenance axis only, alongside ref: the Graph API route of the provenance's document, GET /api/graph/documentation/{dcid}" + }, + "account": { + "anyOf": [ + { + "$ref": "#/components/schemas/FlowAccount" + }, + { + "type": "null" + } + ], + "description": "provenance axis only, alongside ref: whose account of a flow the provenance gives, when ref is a dataset the code index declares; 'provider' when it reports flows as their providers record them" + }, + "selection": { + "anyOf": [ + { + "type": "string", + "const": "per_series" + }, + { + "type": "null" + } + ], + "title": "Selection", + "description": "'per_series' when the carried series select different values on this axis; present in place of ref/label, never alongside them" + }, + "request_basis": { + "anyOf": [ + { + "additionalProperties": { + "type": "string", + "enum": [ + "bound", + "declared_default", + "fallback" + ] + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Request Basis", + "description": "per-member basis (currency/prices/base_year) for a unit axis bound through the request form; present only on the unit axis, alongside either ref/label or selection" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "basis" + ], + "title": "ResolvedFacet", + "description": "One facet axis's resolved value on a Spec (see ResolvedSpec.facets):\nwhich value backed the answer's observations, and why.\n\nbasis is always present. ref/label are present when one distinct value\nserved every carried series; selection carries \"per_series\" in their\nplace when the carried series select different values on this axis --\nnever alongside ref/label. request_basis joins either shape, present\nonly on the unit axis, only when unit was bound through the request form\n(currency/prices/base_year), one basis value per member the request\nnamed.\n\nFields are flat and optional, validated by a model validator, rather\nthan a discriminated ref/selection union. basis and request_basis are\nshared by both the single-ref and per-series shapes, so a union would\nduplicate them across arms for a mechanical gain (moving the\nref/selection XOR to the type level) without expressing the\nrequest_basis-only-on-unit constraint, since that constraint is about\nwhich AXIS a ResolvedFacet lives under (see ResolvedSpec.facets), not\nits ref/selection shape. This is also response-only data, never\ndeserialized from untrusted client bytes, so a runtime validator is\nthe right tool for catching an illegal engine-side construction." + }, + "ResolvedFilter": { + "properties": { + "key": { + "$ref": "#/components/schemas/SlotKey", + "description": "the slot identity" + }, + "binding_kind": { + "type": "string", + "enum": [ + "value", + "set", + "unbound" + ], + "title": "Binding Kind", + "description": "which binding state was applied" + }, + "refs": { + "items": { + "$ref": "#/components/schemas/GraphRef" + }, + "type": "array", + "title": "Refs", + "description": "the bound graph objects (empty for unbound)" + }, + "provenance": { + "type": "string", + "enum": [ + "binder", + "text_recognized", + "measure_elected", + "declared_default" + ], + "title": "Provenance", + "description": "whether the bind call's own election produced this value, a code row recognised in the query's own text forced it, or the measure-family election forced it on an axis the binder left open", + "default": "binder" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "key", + "binding_kind", + "refs" + ], + "title": "ResolvedFilter", + "description": "One applied bind decision, slot by slot." + }, + "ResolvedQualifier": { + "properties": { + "text": { + "type": "string", + "title": "Text", + "description": "verbatim span of the source text that named the term: variable_text, query_text, or a dropped qualifier phrase" + }, + "named": { + "items": { + "$ref": "#/components/schemas/GraphRef" + }, + "type": "array", + "title": "Named", + "description": "every code row the span names in the packaged index, any code system; empty when none did" + }, + "slot": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Slot", + "description": "property dcid of the slot_filters entry whose binding consumed this term, or, on an unbound value the answer's shape has a slot for but leaves unmet, that slot's property; None otherwise" + }, + "disposition": { + "type": "string", + "enum": [ + "bound", + "unbound", + "no_vocabulary" + ], + "title": "Disposition", + "description": "\"bound\" when a final binding covers a named row (or a descendant of one); \"unbound\" when a row was named but no binding covers it; \"no_vocabulary\" when the term names no code at all" + }, + "start": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Start", + "description": "character offset where the term starts in the variable phrase" + }, + "end": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "End", + "description": "character offset where the term ends in the variable phrase" + }, + "evidence": { + "anyOf": [ + { + "type": "string", + "enum": [ + "label", + "synonym", + "model", + "uncovered", + "unavailable", + "unsupported" + ] + }, + { + "type": "null" + } + ], + "title": "Evidence", + "description": "what read the term: a code label or synonym, the bind model, \"uncovered\" for words no reader covers beside a recognised code, \"unavailable\" for a code no table holds, \"unsupported\" for a distinction no binding expresses" + }, + "operation": { + "anyOf": [ + { + "type": "string", + "enum": [ + "union", + "refinement" + ] + }, + { + "type": "null" + } + ], + "title": "Operation", + "description": "how the term's codes combine with another term's on one code system: a union of both, or a refinement to the narrower" + }, + "selected": { + "items": { + "$ref": "#/components/schemas/GraphRef" + }, + "type": "array", + "title": "Selected", + "description": "the codes the term asked for before the combination simplified them" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text", + "named", + "disposition" + ], + "title": "ResolvedQualifier", + "description": "One narrowing term the request's text named, and what became of it.\n\nThe term's text can come from the variable phrase, from the verbatim\n`query_text`, or from an admitted qualifier tie (see\n`_resolve_query_qualifiers`). `text` is the verbatim span of whichever\nsource named it. `named` is every code row -- any system -- that span\nnames in the packaged index;\nempty when the text names no code at all (a `no_vocabulary` term). `slot`\nis the constraint property dcid of the `slot_filters` entry whose\nbinding consumed the term, or, on an `\"unbound\"` value the answer's shape\nhas a slot for but leaves unmet, that slot's property; `None` otherwise.\n`disposition` is\n`\"bound\"` when some final binding on a named row's code system covers\nit (that row or a descendant), `\"unbound\"` when a row was named but no\nbinding covers it, and `\"no_vocabulary\"` when the term names no code at\nall -- an LLM-reported phrase (`bind`'s own `unplaced` output) that no\ntaxonomy in this deployment's index can express.\n\n`start` and `end` locate the term in the part's variable phrase. `evidence` says what\nread it, and `None` means a code's label or synonym matched the term as the query\nspelled it, the reading every recognised span records:\n\n- `\"label\"` and `\"synonym\"` name a match on a code's label or synonym; no record sets\n them, since a recognised span records `None`.\n- `\"model\"` marks a phrase the bind model read through a code it chose from the\n phrase's candidate menu, a lexical hit of the menu or a descendant of one\n (`phase_rank_bind._model_records`); `named` holds the chosen codes.\n- `\"uncovered\"` marks words no reader covers beside a recognised code\n (`phase_rank_bind._coverage_records`), recorded `\"unbound\"` with that code's rows as\n `named`.\n- `\"unavailable\"` marks a code term the elected shape cannot apply: one naming only\n codes no shape can bind, or, on a part naming a dataset, one no row of that dataset\n holds (`phase_rank_bind._unavailable_qualifiers`), recorded `\"unbound\"`.\n- `\"unsupported\"` marks an exclusion or comparison phrase no binding expresses\n (`phase_rank_bind._unsupported_records`), recorded `\"no_vocabulary\"`.\n\n`operation` and `selected` describe how the term's codes combine with\nanother term's on one code system, and the codes it asked for before that\ncombination simplified." + }, + "ResolvedScope": { + "properties": { + "axis": { + "type": "string", + "enum": [ + "observationAbout", + "origin", + "destination" + ], + "title": "Axis", + "description": "the role-keyed axis the request left unnamed and the engine defaulted" + }, + "members": { + "items": { + "$ref": "#/components/schemas/ResolvedEntity" + }, + "type": "array", + "title": "Members", + "description": "every entity on axis this Spec's read plan serves, sorted by ref; each carries role == axis and a best-effort label/entity_type from a batched graph read, None when the graph has neither" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "axis", + "members" + ], + "title": "ResolvedScope", + "description": "The full member set of an entity axis this Spec's request left unnamed\n(see ResolvedSpec.scope).\n\n``axis`` is observationAbout when place defaulting expanded a place-less\nrequest, and origin or destination when directional-role defaulting\nexpanded a role-bearing request. ``members`` lists the entities on that axis\nthe answer's read plan serves, the ones a coverage breadth dimension for the\nsame axis counts. members is the single-element [\"Earth\"] list when the query\nresolved as a worldwide total.\nThe response-level diagnostics may include place_scope_defaulted or\nrole_scope_defaulted for such resolution, but those warnings are not a\nper-Spec one-to-one representation of this field. The scope lives outside\nBaseIdentity, the spec hash, and resolved.entities: a resubmit of the\nsame definition rediscovers it from the live graph." + }, + "ResolvedSpec": { + "properties": { + "shape": { + "$ref": "#/components/schemas/Shape", + "description": "the structural family chosen" + }, + "slots": { + "items": { + "$ref": "#/components/schemas/Slot" + }, + "type": "array", + "title": "Slots", + "description": "one entry per slot the shape defines, each in a binding state" + }, + "inapplicable_slots": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Inapplicable Slots", + "description": "the slots whose property none of the resolved StatVars declares, listed by property dcid; empty when every slot applies. Joins to resolved.slots[*].key.property.ref. Applicability is graph state, so it is reported here and the slot itself reads 'unbound' in the definition either way. It is never a member of BaseIdentity, never hashed." + }, + "unresolved_slots": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Unresolved Slots", + "description": "the slots whose property is present but unresolved on at least one resolved StatVar (the graph asserted a value for this axis but could not resolve it to a dcid), listed by property dcid; empty when no such slot exists. Joins to resolved.slots[*].key.property.ref, and is disjoint from inapplicable_slots: a property is either never asserted by any resolved StatVar (inapplicable_slots), present but unreadable on one (this field), or neither (a genuinely open axis). The slot itself reads 'unbound' in the definition in every one of these cases; it is never a member of BaseIdentity, never hashed." + }, + "stat_vars": { + "$ref": "#/components/schemas/ResolvedStatVars", + "description": "resolved StatVar(s) inside the region, and the scope they were drawn from" + }, + "entities": { + "items": { + "$ref": "#/components/schemas/ResolvedEntity" + }, + "type": "array", + "title": "Entities", + "description": "resolved entities the data is about; may be empty if where is unbound" + }, + "entity_groups": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/EntityGroup" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Entity Groups", + "description": "the named group each role's entities stand for, keyed by the role key the entities above carry: each group whose members are exactly the entities definition.identity binds on that role. The heading names a role by its group and member count ('the 27 EU member states') in place of its members. None when no role was asked for as a group" + }, + "coverage": { + "oneOf": [ + { + "$ref": "#/components/schemas/CoverageExact" + }, + { + "$ref": "#/components/schemas/CoverageBreadth" + }, + { + "$ref": "#/components/schemas/CoverageBare" + } + ], + "title": "Coverage", + "description": "observation footprint", + "discriminator": { + "propertyName": "kind", + "mapping": { + "bare": "#/components/schemas/CoverageBare", + "breadth": "#/components/schemas/CoverageBreadth", + "exact": "#/components/schemas/CoverageExact" + } + } + }, + "headline": { + "anyOf": [ + { + "$ref": "#/components/schemas/Headline" + }, + { + "type": "null" + } + ], + "description": "exact latest-year summary for a role-bearing answer (see Headline); None for a non-role-bearing Spec, which coverage above already answers exactly or approximately enough that no separate latest-year summary is computed" + }, + "download": { + "anyOf": [ + { + "$ref": "#/components/schemas/DownloadFacts" + }, + { + "type": "null" + } + ], + "description": "the rows, series, years and licence of the file a mint of this Spec writes (see DownloadFacts). None when the Spec has no read plan: a no-data answer, or same-shape parts merged into one Spec" + }, + "coverage_stamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Coverage Stamp", + "description": "the coverage artifact's own data-version stamp this Spec's role-bearing population and headline were confirmed against (series_coverage.CoverageManifest.stamp); None for a non-role-bearing Spec, which never consults coverage. The graph-derived analogue of this stamp (graph_generation) is not itself a wire field; this is coverage's own, published because coverage is a second, independently-versioned data source an answer can be stale against" + }, + "scope": { + "anyOf": [ + { + "$ref": "#/components/schemas/ResolvedScope" + }, + { + "type": "null" + } + ], + "description": "the full member set of an entity axis this Spec's resolution defaulted (see ResolvedScope): observationAbout for place defaulting, or origin/destination for directional-role defaulting. Response-level diagnostics may carry place_scope_defaulted or role_scope_defaulted, but warning presence is not an exact per-Spec equivalence; None when this Spec did not default an entity axis" + }, + "facets": { + "additionalProperties": { + "$ref": "#/components/schemas/ResolvedFacet" + }, + "type": "object", + "title": "Facets", + "description": "the facet axis values of the series this Spec's read plan serves, the series its observations carry (see ResolvedFacet); the same whether or not observations are included or deferred to a trailing SSE event. Sparse, meaning an axis no served series carries is omitted, never a null placeholder. {} when the Spec serves no series" + }, + "observations": { + "anyOf": [ + { + "$ref": "#/components/schemas/SpecObservations" + }, + { + "type": "null" + } + ], + "description": "the observation values behind coverage above; None when not resolved for this Spec (e.g. no entity to probe, or response_options.include_observations is false), when ResolveOptions.include_observations opts into deferred SSE delivery (populated instead via a trailing observations event, mirroring slot_options/entity_options' own coverage-probe transport split), or for a candidates-status entry, nearest_real, or flagged_match spec (this iteration only populates it on a primary definite answer)." + }, + "slot_options": { + "items": { + "$ref": "#/components/schemas/SlotOptions" + }, + "type": "array", + "title": "Slot Options", + "description": "the candidate set each bound slot was chosen from, one entry per slot with a non-empty taxonomy; omits when/source and any slot with no observed or seeded values. spec_id does not depend on this field, so it never affects permalinks or dedup." + }, + "entity_options": { + "items": { + "$ref": "#/components/schemas/EntityOptions" + }, + "type": "array", + "title": "Entity Options", + "description": "candidate sets for directional origin or destination axes. An entry whose entity_ref is omitted describes an axis the role-bearing query left open; its role selects the identity.entities key for a resubmit, and the matching role_axis_facts entry reports that axis's member count. An entry with an entity_ref describes alternatives to a bound axis. Empty when the family has no directional entity-option concept. spec_id does not depend on this field." + }, + "facet_options": { + "items": { + "$ref": "#/components/schemas/FacetOptions" + }, + "type": "array", + "title": "Facet Options", + "description": "the candidate set each facet axis (provenance/measurementMethod/unit) was chosen from, one entry per axis with at least one value observed on the resolved candidates' unfiltered facets; an axis with no observed value is omitted, never an empty entry. Computed for every definite Spec and every candidate. Over SSE with response_options.include_option_coverage set, the entries arrive as trailing facet_options events and this list stays empty. Unlike slot_options, this has no bind-time baseline to fall back to. spec_id does not depend on this field." + }, + "rendered_sentence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Rendered Sentence", + "description": "the editable confirmation sentence for this spec, present on every Spec a part shows; None on an equivalent_readings entry. It holds the heading and the byline only (see SentenceToken.segment): 'Germany's gross ODA disbursements to Kenya, 1973 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).' It states what this Spec is and nothing about the request that produced it, so it reads the same after a dataset_resubmit and serves as the Spec's label. The part that carries this Spec states how it departs from the request (_PartBase.departures)" + }, + "sentence_plan": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentence Plan", + "description": "the ordered token form of rendered_sentence, tying its tokens to definition parts; present under the same condition, None otherwise. Every token's segment is 'heading' or 'byline'" + }, + "trace": { + "$ref": "#/components/schemas/ResolutionTrace", + "description": "consolidated record of how the query was understood" + }, + "confidence": { + "anyOf": [ + { + "type": "string", + "enum": [ + "high", + "medium", + "low" + ] + }, + { + "type": "null" + } + ], + "title": "Confidence", + "description": "qualitative, relative retrieval confidence for this interpretation; None when not assessed. Bands are heuristic and may be retuned without a schema-version bump." + }, + "basis": { + "anyOf": [ + { + "type": "string", + "enum": [ + "structural", + "nominated", + "twin", + "direction" + ] + }, + { + "type": "null" + } + ], + "title": "Basis", + "description": "why the part offers this Spec as one of its candidates: 'structural', a reading that differs from the elected one only on a stat type, price basis or denominator the request leaves open; 'nominated', a reading the model named as a genuine reading of the request's phrase; 'twin', an equivalent reading of the elected one, offered where the elected one holds no data; 'direction', the same reading with the other direction for a place the request names without one, which a client shows as a direction prompt. The elected reading, listed first, carries none. None on a definite answer and on every Spec outside CandidateSet.specs." + }, + "available_at_place": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Available At Place", + "description": "whether this spec has lifetime availability at the resolved place, independent of the coverage window. True = confirmed at place; False = the variable matched but has no observation here (the flagged_match case); None = not assessed (no place entity, or a named family such as dev-finance). CoverageExact.has_data may be False for a requested window even when this field is True." + }, + "equivalent_readings": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Spec" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Equivalent Readings", + "description": "other StatVar(s) confirmed to encode the same real-world indicator as this Spec. Each entry is a full Spec carrying identity and the material needed to re-resolve onto it: its definition.identity, spec_id, and resolved StatVar dcids provide everything ResubmitIdentityPayload requires. Its rendered_sentence, sentence_plan, facet_options, and observations come from re-resolving onto it on a dataset_resubmit identity entry, not from this response. This Spec's own answer stands on its own regardless. Switching to a named entry is optional, offered for its source vocabulary's own coverage. None when no such encoding is known. Never a member of BaseIdentity, never hashed, and never populated on its own entries in turn. An entry's own equivalent_readings is always empty." + }, + "skills": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Skills", + "description": "ids of the skills this Spec's bound graph nodes and selected provenance call for, matched against the shared skills index, most specific first: skills matched through a graph node by hop, then breadth, and skills matched only through the provenance last; present under the include_skills option. None = the request did not ask; [] = it asked and nothing matched." + }, + "alternative_measures": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SpecAlternativeMeasure" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Alternative Measures", + "description": "every other measure this Spec could equally answer with -- either another populated partition from the same family as the one this Spec's own served rows exhibit (retrieval.bound_values.observed_measure_family), or a genuinely distinct also_plausible candidate whose only difference from this Spec is measured_property (measurement_denominator held equal), folded in here instead of left as a second candidates entry -- each with its own identity, a disambiguating label, and the axis of the sentence token whose menu offers it: 'what' entries are the measure switch beside measure_label below, 'unit' entries the price-basis options of the byline's unit token (binding_ref 'unit:'). A partition or folded candidate with no authored label is left out. None when this Spec's shape carries no measure family at all and no measure-sibling candidate was folded in, or its served rows span more than one partition; a served partition with every sibling unlabelled, or with none, still publishes []. Never a member of BaseIdentity, never hashed." + }, + "measure_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Measure Label", + "description": "the readable label for the measure partition this Spec's own served rows exhibit, composed the same way as each 'what' alternative_measures entry's label: what a switch built from those entries would show as currently selected. It names no price basis ('gross disbursements', not 'gross disbursements (nominal)'). Current or constant prices belong to the unit, which the byline's unit token states. None under the same condition alternative_measures is None" + }, + "measure_label_axes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Measure Label Axes", + "description": "the declared measure-axis identifiers (code_index.types.MeasureAxis.axis, e.g. 'measuredProperty', 'measurementQualifier', or a constraint-property dcid such as a financial-flow-type or netting-basis axis) that measure_label was composed from. Every axis the served partition carries a value on is included here, whether or not its value appears in measure_label's own text. A renderer uses this to keep a bound how-slot sharing one of these property dcids from repeating what measure_label already said. Always [] when measure_label is None." + }, + "measure_axis_values": { + "items": { + "$ref": "#/components/schemas/MeasureAxisValue" + }, + "type": "array", + "title": "Measure Axis Values", + "description": "each axis in measure_label_axes with the value the served partition holds on it, in the same order, including values the query never named (a declared default such as Gross or Nominal). Labels come from the measure index. Always [] when measure_label is None. Never a member of BaseIdentity, never hashed." + }, + "related_group": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the StatVarGroup related_measures come from: the smallest group this Spec's one StatVar belongs to that holds 2 to 40 members, ties broken by group dcid. None when related_measures is None or []" + }, + "related_measures": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/RelatedMeasure" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Related Measures", + "description": "up to 5 other members of related_group with data at every place this Spec names (and in its requested years when it names a range), ordered by the years they share with this Spec's StatVar there, then by dcid. Only a definite Spec that serves exactly one StatVar, has no measure family (measure_label is None) and names places with no roles carries a list; [] when no group qualifies or no other member has data there. None for any other Spec, and when the graph reads failed or ran past their deadline. Never a member of BaseIdentity, never hashed." + }, + "open_axis_facts": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/OpenConstraintAxisFact" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Open Axis Facts", + "description": "one entry per constraint axis this Spec's own served StatVar members declare (an arc naming the property, resolved or not) that the query left unbound, each naming the axis's property and what those members exhibit on it: whether they agree on a value (varies=False) or differ (varies=True), and undeclared_count for how many declare none at all. None when this Spec's served members declare no constraint property the query left open at all. This is distinct from an open axis every member declares nothing for, which still publishes its own entry (varies=False, undeclared_count equal to the served member count). Never a member of BaseIdentity, never hashed." + }, + "role_axis_facts": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/RoleAxisFact" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Role Axis Facts", + "description": "one entry per directional role axis (origin/destination) this role-bearing Spec's query left open, naming the axis and the member population its own confirmation already resolved (see RoleAxisFact). None when this Spec is not role-bearing, or is role-bearing but every role axis its shape declares carries a bound entity. Never a member of BaseIdentity, never hashed." + }, + "unit_conversion": { + "anyOf": [ + { + "$ref": "#/components/schemas/UnitConversion" + }, + { + "type": "null" + } + ], + "description": "the currencies and price bases a unit request can convert this answer to. Null when the served members' unit is no currency, no conversion recipe converts them (a stock, a series not in nominal prices, or a provenance that declares no recipe), the recipe's tables lack the native currency's rate in a served year, so nothing converts, or no conversion catalogue is loaded, which the part's unit_conversion_unavailable warning states. Never a member of BaseIdentity, never hashed." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "shape", + "slots", + "stat_vars", + "entities", + "coverage", + "trace" + ], + "title": "ResolvedSpec", + "description": "What the graph held at resolution time: the engine's report of what it\ndid with the ask. Meant for display and diagnostics, never hashed;\n`Spec.spec_id` depends only on `Spec.definition.identity`. Beside the\ncontract's own `resolved` member list (`stat_vars`, `inapplicable_slots`,\n`unresolved_slots`, `entities`, `coverage`, `headline`, `facets`, `observations`,\n`rendered_sentence`/`sentence_plan`, `slot_options`/`entity_options`,\n`trace`, `confidence`), this also carries the engine's own supersets\n(`shape`, `slots`, `available_at_place`) that slot_options/sentence_plan\njoin against and the eval harness scores." + }, + "ResolvedStatVars": { + "properties": { + "member_count": { + "type": "integer", + "title": "Member Count", + "description": "how many members are confirmed to carry observations at this resolve's own probe entities; see this model's own docstring for how this differs from resolved.shape.member_count" + }, + "member_count_exact": { + "type": "boolean", + "title": "Member Count Exact", + "description": "True when member_count is a true total; False when it is a floor -- the population being at least member_count large, not exactly member_count -- because it was measured over a capped recall sample, because the probe stopped once the answer's member was confirmed, or because it is a where-axis merge's max() of its members' own counts rather than a computed union. Defaults to True, correct for a caller that has not measured otherwise", + "default": true + }, + "served_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Served Count", + "description": "how many StatVars a Datasets mint of this Spec's definition serves, the length of its trace.resolved_stat_vars; 1 for a single series. Null when the membership is unsettled: Search answered from members the mint may not serve, and the part carries membership_unverified" + }, + "data_date_range": { + "anyOf": [ + { + "$ref": "#/components/schemas/DateRange" + }, + { + "type": "null" + } + ], + "description": "the earliest first date and latest last date of the points the answer's read plan serves over its StatVars; null when it serves none" + }, + "source_codes": { + "items": { + "$ref": "#/components/schemas/SourceCode" + }, + "type": "array", + "title": "Source Codes", + "description": "the publisher series codes of the StatVars the answer serves, sorted by provenance then code and without repeats; left out when no served StatVar has a code. They identify the series a publisher files these StatVars under, and the answer is the same with or without them. A code names the whole answer only where its entry is exact" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "member_count" + ], + "title": "ResolvedStatVars", + "description": "`resolved.stat_vars` on the wire: how many StatVars the answer holds, how many a\nDatasets mint of the Spec's definition serves, and the dates the answer serves over\nthem. The members themselves stay off the wire; `POST /api/datasets/{id}/members`\nlists the ones a mint serves.\n\nmember_count is the population confirmed to carry observations at this\nresolve's own probe entities, not resolved.shape.member_count's\nbindings-admitted population. The two differ for two reasons. A member the\nshape's bindings admit can carry no observation at the resolved place. And on\na role-bearing shape the answer reads one role class of the admitted members:\nwhere a total stands for its breakdowns the breakdowns are folded into it, so a\ndonor-only answer can state 255 admitted members beside 1 confirmed while every\none of the 255 holds data. On a standard (non-role-bearing) shape this population can itself\nbe a floor: the packaged code index does not source members for every\nshape family, so a shape outside it falls back to its recall sample, the\nmembers recall found, and member_count cannot exceed what that sample\nadmitted. An answer naming one member of a family too large for one read stops\nreading once that member is confirmed, so member_count counts the members read: \"latest\nlife expectancy data\" reads the family's total and not its other 350 members. A\nwhere-axis merge (same_shape.py, \"population\nof Kenya and Uganda\") publishes max() of its members' own member_count\nrather than the sum, since the same StatVar is typically confirmed at\nevery member's own place and summing would double-count the\nintersection -- max() is a true lower bound of the union. member_count_exact\nrecords which of these applies.\n\nserved_count is the mint's own count, a function of the definition alone: the\nStatVars a Datasets mint of `definition` serves, the length of its\n`trace.resolved_stat_vars`. It is stated whenever Search settled the membership the\nmint resolves: a family the code index decides, or a family the mint's member walk\nsettled for this definition. Null when Search answers from members it could not\nsettle, which the part flags with a `membership_unverified` warning." + }, + "ResubmitCandidate": { + "properties": { + "identity": { + "$ref": "#/components/schemas/BaseIdentity", + "description": "this candidate's complete identity" + }, + "entity_groups": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/EntityGroup" + }, + "propertyNames": { + "enum": [ + "observationAbout", + "origin", + "destination" + ] + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Entity Groups", + "description": "the named group each role's entities were asked for as, keyed by entity role key. Post a prior Spec's resolved.entity_groups beside any identity derived from that Spec. A group is kept when it posts a dcid and the graph's members of that node are exactly the identity's entities on the role; any other group, including one on a role the identity binds no entity on, is dropped" + }, + "assumptions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array", + "maxItems": 67 + }, + { + "type": "null" + } + ], + "title": "Assumptions", + "description": "the assumptions of the reading this candidate rebuilds, echoed as the response gave them, which are the candidates part's reading_assumptions under the reading's spec_id. The rebuilt reading's reading_assumptions entry states the echoed items that still hold, each worded from the rebuilt reading by the rule ResubmitIdentityEntry.assumptions states, and the rebuilt part's assumptions are the items every reading_assumptions list holds alike. An item the echo lacks is not stated, so an edit of a defaulted slot to another value drops that default, and [], the echo of a reading that stated none, states none. None, the default, means the client echoes nothing for this reading, which yields what a fresh request would: no declared default, since the posted identity binds every slot, and the open roles and place scope the reading reads" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "identity" + ], + "title": "ResubmitCandidate", + "description": "One candidate identity within a `candidates` dataset_resubmit entry. The\nengine derives its StatVar members as it does for an identity entry." + }, + "ResubmitCandidatesEntry": { + "properties": { + "entry_kind": { + "type": "string", + "const": "candidates", + "title": "Entry Kind", + "description": "discriminator for a candidate-set dataset_resubmit entry", + "default": "candidates" + }, + "variable_text": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "title": "Variable Text", + "description": "this part's variable text, echoed back onto the rebuilt part" + }, + "ordering": { + "type": "string", + "enum": [ + "broadest_first", + "intent_rank" + ], + "title": "Ordering", + "description": "how `candidates` below was ordered when this set was first produced; echoed back verbatim onto the rebuilt candidates part, never recomputed" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "echoed back verbatim onto the rebuilt candidates part -- see CandidateSet.truncated for what this flags" + }, + "candidates": { + "items": { + "$ref": "#/components/schemas/ResubmitCandidate" + }, + "type": "array", + "maxItems": 50, + "minItems": 2, + "title": "Candidates", + "description": "the competing candidates to re-materialise, in posted order, always -- the rebuilt CandidateSet.specs preserves this exact order. Refused request_invalid, at the engine rather than here, when the posted count exceeds this deployment's own ceiling -- readable in advance as caps.max_candidates from GET /api/search/capabilities" + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part is asked beside the others to be compared with them; it is kept apart from same-shape sibling parts. False, the default, folds parts that share a shape into one set answer", + "default": false + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "maxItems": 8, + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "variable_text", + "ordering", + "truncated", + "candidates" + ], + "title": "ResubmitCandidatesEntry", + "description": "One part re-materialised from a posted set of competing candidate\nidentities, through the promote path, in posted order, always. `ordering`\nnames the display rule this set already used, restated rather than\nrecomputed: the order rests on the bind model's election and the availability\nreads of the first answer, which do not round-trip -- see `Ordering` and\n`outcomes.CandidateSet`. This entry carries no\n`max_candidates` field: `CandidateSet.max_candidates` on the response is\nnot posted back and is always server-computed, never client-supplied." + }, + "ResubmitIdentityEntry": { + "properties": { + "entry_kind": { + "type": "string", + "const": "identity", + "title": "Entry Kind", + "description": "discriminator for a single-identity dataset_resubmit entry", + "default": "identity" + }, + "variable_text": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "title": "Variable Text", + "description": "this part's variable text, echoed back onto the rebuilt part" + }, + "identity": { + "$ref": "#/components/schemas/BaseIdentity", + "description": "the complete identity. Post a prior Spec.definition.identity byte-for-byte for a no-op resubmit; change nested members, including entities.origin or entities.destination, to edit that definition" + }, + "entity_groups": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/EntityGroup" + }, + "propertyNames": { + "enum": [ + "observationAbout", + "origin", + "destination" + ] + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Entity Groups", + "description": "the named group each role's entities were asked for as, keyed by entity role key. Post a prior Spec's resolved.entity_groups beside any identity derived from that Spec. A group is kept when it posts a dcid and the graph's members of that node are exactly the identity's entities on the role; any other group, including one on a role the identity binds no entity on, is dropped" + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part is asked beside the others to be compared with them; it is kept apart from same-shape sibling parts. False, the default, folds parts that share a shape into one set answer", + "default": false + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "maxItems": 8, + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + }, + "assumptions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array", + "maxItems": 67 + }, + { + "type": "null" + } + ], + "title": "Assumptions", + "description": "the assumptions of the part this entry rebuilds, echoed as the response gave them. For a definite part these are its assumptions. For a reading picked from a candidates part they are that part's reading_assumptions under the reading's spec_id. The rebuilt part states the echoed items that still hold, each worded from the rebuilt answer: a declared_default whose slot (binding_ref) still binds the echoed refs, an open_role whose axis the answer still reads across every member with no entity of the identity's, and a place_scope on an answer that still names no place. An item the echo lacks is not stated, since the posted identity or its edit asked for it. An edit of a defaulted slot to another value therefore drops that default, and [], the echo of a part that stated none, states none. None, the default, means the client echoes nothing, and the part states what a fresh request would: no declared default, since the posted identity binds every slot, and the open roles and place scope the answer reads. The engine cannot tell an echoed default from one the caller writes for a slot it chose itself, and states such an item while the slot binds its refs. An echo shapes only the caller's own response" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "variable_text", + "identity" + ], + "title": "ResubmitIdentityEntry", + "description": "One part re-resolved from a single identity -- the payload\n`ResubmitIdentityPayload` carries, plus the text echo and operations every\ndataset_resubmit entry needs." + }, + "ResubmitParsedEntry": { + "properties": { + "entry_kind": { + "type": "string", + "const": "parsed", + "title": "Entry Kind", + "description": "discriminator for a re-parsed dataset_resubmit entry", + "default": "parsed" + }, + "part": { + "$ref": "#/components/schemas/ParsedPart", + "description": "this part's resolution inputs -- normally a prior response part's own Part.restatement, posted back verbatim or edited, and resolved through the same per-part machinery the parsed door uses" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "part" + ], + "title": "ResubmitParsedEntry", + "description": "One part genuinely re-resolved through the parsed door's own per-part\npath, from a client-edited restatement of a sibling's own resolution\ninputs (`Part.restatement`) -- re-parsed, where `placeholder` only\nrestates a stub. `part` already carries a required `variable_text` and\nits own `operations`, so this entry needs no separate top-level echo\nfields the way the other three kinds do. Costs one LLM bind per edit, the\ndoor's one entry kind that touches the LLM client at all." + }, + "ResubmitPlaceholderEntry": { + "properties": { + "entry_kind": { + "type": "string", + "const": "placeholder", + "title": "Entry Kind", + "description": "discriminator for a stub dataset_resubmit entry", + "default": "placeholder" + }, + "variable_text": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "title": "Variable Text", + "description": "this part's variable text, echoed back onto the rebuilt part" + }, + "status": { + "type": "string", + "enum": [ + "no_data", + "unsupported" + ], + "title": "Status", + "description": "which stub outcome to restate for this part" + }, + "reason": { + "anyOf": [ + { + "type": "string", + "enum": [ + "source_not_resolved", + "source_ambiguous", + "source_code_not_held", + "source_code_ambiguous", + "source_code_shares_variable", + "entity_not_resolved", + "entity_ambiguous", + "entity_set_too_large", + "entity_role_not_admitted", + "variable_not_resolved", + "role_not_resolved", + "unit_not_resolved", + "rate_coverage_gap", + "no_matching_slice", + "binding_mismatch", + "denominator_not_available", + "no_observations", + "facet_not_available", + "role_incompatible", + "role_signature_incompatible", + "qualifier_not_bound" + ] + }, + { + "type": "null" + } + ], + "title": "Reason", + "description": "the NoData.reason to restate onto the rebuilt part; required when status is no_data, refused when status is unsupported" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Code", + "description": "the reason, a code from the platform registry, to restate onto the rebuilt part's Unsupported.code; required when status is unsupported, refused when status is no_data" + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part is asked beside the others to be compared with them; it is kept apart from same-shape sibling parts. False, the default, folds parts that share a shape into one set answer", + "default": false + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "maxItems": 8, + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "variable_text", + "status" + ], + "title": "ResubmitPlaceholderEntry", + "description": "One part restated as a stub from a no_data/unsupported outcome the\nclient already holds -- zero graph round-trips, zero LLM calls. Carried\nforward unresolved so its sibling parts' composed sentence and fold can\nstill be computed across the whole dataset; the engine stamps a\npart-scoped `part_restated` info warning on the rebuilt part." + }, + "RetentionModel": { + "properties": { + "pinned": { + "type": "boolean", + "title": "Pinned", + "description": "whether the frame the version's files render from is in the pinned tier, which has no expiry" + }, + "held_until": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Held Until", + "description": "when the working-tier frame stops being guaranteed, 30 days after it was stored. A download of the frame after `held_until`, while its bytes survive, renews it for 30 days. After it, a file selector or download link request that must render its file again renews the frame for 30 days if the frame's bytes survive, and otherwise refuses `artifact_expired`. A rebuild of unchanged data through `GET /api/datasets/{id}` or `POST /api/datasets` stores the frame again. Absent when pinned. It can be in the past" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "pinned" + ], + "title": "RetentionModel", + "description": "How long a version can still be fetched, which `datasets_api.retention` computes when a\ndoor serves the version. No stored body holds it." + }, + "RoleAxis": { + "type": "string", + "enum": [ + "origin", + "destination" + ] + }, + "RoleAxisFact": { + "properties": { + "role": { + "$ref": "#/components/schemas/RoleAxis", + "description": "which flow axis this fact is about" + }, + "member_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Member Count", + "description": "how many entities this axis' open scope resolves to. None when the count could not be established without a read this response chose not to make (e.g. a discovered opposite axis whose own role index was omitted after a cap trip); the fact still publishes in that case, naming the axis as open with an explicit unknown rather than staying silent about it" + }, + "members_available": { + "type": "boolean", + "title": "Members Available", + "description": "whether the member list this count summarises is itself known and could be enumerated (e.g. through entity_options or the options door), not just counted. False exactly when member_count is None" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "role", + "member_count", + "members_available" + ], + "title": "RoleAxisFact", + "description": "One directional role axis (origin or destination) a role-bearing\nSpec's query left open, and what this Spec's own confirmation already\nknows about its member scope (see ResolvedSpec.role_axis_facts).\n\nUnlike OpenConstraintAxisFact, a role axis has no declared value of its\nown that could vary across served members -- the axis is a place a flow\nentity binds, not a constraint members assert -- so this carries no\nvaries/undeclared_count of its own; it carries only what a role axis\ngenuinely has: a population size and whether that population is known." + }, + "RootEntry": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + }, + "count": { + "type": "integer", + "title": "Count", + "description": "codes for a code system, members under the default projection for a group or region, Datasets for a source" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "count" + ], + "title": "GraphRootEntry", + "description": "A place to start listing from, with the length of its list." + }, + "Roots": { + "properties": { + "code_systems": { + "items": { + "$ref": "#/components/schemas/RootEntry" + }, + "type": "array", + "title": "Code Systems" + }, + "groups": { + "items": { + "$ref": "#/components/schemas/RootEntry" + }, + "type": "array", + "title": "Groups" + }, + "regions": { + "items": { + "$ref": "#/components/schemas/RootEntry" + }, + "type": "array", + "title": "Regions" + }, + "sources": { + "items": { + "$ref": "#/components/schemas/RootEntry" + }, + "type": "array", + "title": "Sources" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the document read" + } + }, + "type": "object", + "required": [ + "code_systems", + "groups", + "regions", + "sources", + "built_from" + ], + "title": "GraphRoots", + "description": "`GET /api/graph/roots`: where to start listing. Each list is ordered by dcid." + }, + "Scope-Input": { + "properties": { + "window": { + "anyOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/WindowAll" + }, + { + "$ref": "#/components/schemas/WindowLatest" + }, + { + "$ref": "#/components/schemas/WindowRange" + } + ], + "discriminator": { + "propertyName": "kind", + "mapping": { + "all": "#/components/schemas/WindowAll", + "latest": "#/components/schemas/WindowLatest", + "range": "#/components/schemas/WindowRange" + } + } + }, + { + "type": "null" + } + ], + "title": "Window", + "description": "the years to serve. Replaces the spec's window whole" + }, + "entities": { + "anyOf": [ + { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Entities", + "description": "role name to dcids. Replaces the spec's whole entity binding. A role this map omits is unbound, so a client narrowing one role repeats the spec's other roles, and {} unbinds every bound role. An open role the map binds is no longer open" + }, + "facets": { + "anyOf": [ + { + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/FacetRefBinding" + }, + { + "oneOf": [ + { + "$ref": "#/components/schemas/UnitCurrentPricesRequestBinding" + }, + { + "$ref": "#/components/schemas/UnitConstantPricesRequestBinding" + } + ], + "discriminator": { + "propertyName": "prices", + "mapping": { + "constant": "#/components/schemas/UnitConstantPricesRequestBinding", + "current": "#/components/schemas/UnitCurrentPricesRequestBinding" + } + } + }, + { + "$ref": "#/components/schemas/FacetNationalCurrencyBinding" + } + ] + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Facets", + "description": "axis to binding. Replaces the spec's whole facet binding" + } + }, + "additionalProperties": false, + "type": "object", + "title": "Scope", + "description": "The `scope` block a mint request may carry. On a `spec_id` input each\nsupplied member replaces the stored spec's value for that member whole,\nand an omitted member keeps the spec's value. On a `statvar_set` input,\nwhich has no stored spec, an omitted member is unbound (everything).\n`window` narrows the result to `all`, `latest`, or a\n`start_year`/`end_year` range. `entities` binds role names to non-empty\nlists of dcids (a role's values must each be non-empty and must not\ncontain `+` or `,`). `facets` binds a known axis (`provenance`,\n`measurementMethod`, `unit`) to a specific ref, or `measurementMethod`\nor `unit` to a null ref. The `unit` axis alone may instead carry a\nconversion request (`FacetUnitRequestBinding`) or ask for each entity's\nown currency (`FacetNationalCurrencyBinding`)." + }, + "Scope-Output": { + "properties": { + "place": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the country the question named, when the engine confirmed it as a country; null when the question named no place or named one that is not a confirmed country" + } + }, + "additionalProperties": false, + "type": "object", + "title": "AnswerScope", + "description": "What a catalogue or declined answer was scoped to. Titled apart from the\ndatasets API's own `Scope`, which the composed app's OpenAPI also publishes." + }, + "ScopeAndUnits": { + "properties": { + "countries": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Countries" + }, + "years_covered": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Years Covered" + }, + "granularity": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Granularity" + }, + "currencies": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Currencies" + } + }, + "type": "object", + "required": [ + "countries", + "years_covered", + "granularity", + "currencies" + ], + "title": "ScopeAndUnits", + "description": "`countries` is always `[]`. `years_covered` is filled where the graph\nhas it. `currencies` lists every currency unit the coverage index gives the\nsource's Provenances, sorted, and `granularity` is filled where it gives\none period and axis pair for the source." + }, + "SentenceToken": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "text", + "slot" + ], + "title": "Kind", + "description": "'text' is invariant wording: a connective carrying its own surrounding whitespace (' for ', ' to '), a possessive suffix (\"'s\"), a bare ' '/', ' separator, the terminal '.', or a departure sentence; 'slot' is a slot- or entity-bound phrase, or on an entity_ambiguous no_data plan the ambiguous wording itself, which a client hangs the candidate menu on. A client that does not recognise a kind should render its text as plain text regardless." + }, + "text": { + "type": "string", + "title": "Text", + "description": "the rendered text for this token; empty string for a slot with nothing bound" + }, + "axis": { + "anyOf": [ + { + "type": "string", + "enum": [ + "what", + "how", + "where", + "when", + "source", + "unit", + "method" + ] + }, + { + "type": "null" + } + ], + "title": "Axis", + "description": "the grammatical axis this token fills, when kind=='slot': one of the request-slot axes, 'unit' for the byline's unit of measure, or 'method' for the byline's measurement method, which no request slot carries. The unit token's binding_ref is 'unit:', and its options are the Spec's resolved.alternative_measures entries with axis 'unit': the price-basis siblings (current and constant prices) where the graph holds both. The method token appears only when the identity binds measurementMethod (a ref, a null ref, or a set), after the source token; its binding_ref is 'method:', its text the bound method's label without a trailing full stop or 'No stated method' for a null ref, and its options the Spec's facet_options entry with axis 'measurementMethod'" + }, + "segment": { + "type": "string", + "enum": [ + "coverage", + "heading", + "byline", + "departure", + "assumption" + ], + "title": "Segment", + "description": "the part of the sentence this token belongs to: 'coverage' (the 'Answered N of M parts.' a mixed envelope sentence opens with, never on a part's or a Spec's own plan), 'heading' (what the answer is), 'byline' (latest-year label, unit, source, and a bound method), 'departure' (the text of one Departure on the same part, never on a Spec's own plan), or 'assumption' (the closing clause naming what the answer assumed, from the parts' assumptions, never on a Spec's own plan). A client styles each segment as a block; the plain join of every token's text still equals rendered_sentence", + "default": "heading" + }, + "property_dcid": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Property Dcid", + "description": "the constraint property dcid this token renders, when one exists; null or omitted for property-less axes (when/source), for a shape-label fallback phrase with no backing slot, and for entity-role tokens with no backing where slot. Set on a 'destination' entity-role token when the shape declares a where slot backing that axis (e.g. dev-finance)." + }, + "role": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoleAxis" + }, + { + "type": "null" + } + ], + "description": "origin/destination when this token renders a directional entity role (the flow's two endpoints read back), or the directional scope an unbound where slot resolved to. entity_refs is the discriminator: non-empty on the entity read-back, empty on the unbound-where-slot fallback. binding_ref is not: an entity read-back carries binding_ref too whenever the shape declares a where slot backing the 'destination' axis (e.g. dev-finance), the same condition under which the unbound-where-slot fallback always carries it, so a present binding_ref value never separates the two. Both kinds join to the Spec.resolved.entity_options entry on the same role. A third token sits on an entity_ambiguous no_data plan, which has no Spec: the ambiguous wording, with the role the request gave it (null when it gave none), no entity_refs and no binding_ref, and text equal to one NoData.ambiguous_entities[i].text on the same part. The client titles that wording's candidate menu by this role and posts the pick's entry of NoData.options." + }, + "binding_ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Binding Ref", + "description": "join key correlating this token to its Spec.resolved.slots / SlotOptions entry: 'axis:property_dcid', i.e. SlotKey.as_ref() (matching Slot.key and SlotOptions.key). Set for a slot-backed token, and also for a 'destination' entity-role token when the shape declares a where slot backing that axis (e.g. dev-finance) -- see entity_refs for the entity side of that token. The byline's unit token carries 'unit:', which no slot backs; its options are the resolved.alternative_measures entries with axis 'unit'. The byline's method token carries 'method:', which no slot backs either. Null or omitted for plain connective text, a shape-label fallback phrase with no backing slot, and 'origin'/unbacked-'destination' entity-role tokens." + }, + "entity_refs": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Entity Refs", + "description": "entity dcids this token renders, set on the entity read-back, one of the two token kinds role marks (see role's own docstring for the other, the unbound-where-slot fallback, which leaves entity_refs empty even though it too carries role) -- a directional entity read-back has no Spec.resolved.slots entry of its own, though a 'destination' token may additionally carry binding_ref when a backing where slot exists (e.g. dev-finance); one dcid per entity in the token's group, in the same order as the entities joined into this token's text -- e.g. a 'destination' token reading 'Ethiopia, Kenya, and Uganda' carries all three dcids, so a client can tell a 3-entity answer from a 1-entity one without parsing rendered text. Empty when role is unset, and this emptiness, not binding_ref, is the join rule that separates the two role-bearing kinds." + }, + "states": { + "items": { + "type": "string" + }, + "type": "array", + "title": "States", + "description": "the refs a heading or byline slot token states, so a client edits each from this token: its own binding_ref, then each binding the renderer left silent because this token's text already says it. Refs read as binding_ref does ('how:crsTypeOfFlow', 'where:', 'origin:', 'unit:'), plus 'axis:' for a measure axis no slot carries ('axis:nettingBasis'). The measure noun states the measure axes its label or authored noun carries, the how values it names, and the agreed open axes beside it; a StatVar name or graph name states the how values it folds. The byline's unit token states 'unit:' and, when it names a price basis, the measurementQualifier axis. The byline's source token states 'source:', which is also its binding_ref where the answer binds a source slot. The byline's method token states 'method:', its binding_ref, and while the identity binds no method no token states 'method:'. Empty on a token with empty text, on text tokens, and outside heading and byline slot tokens. Within one part, no ref appears on two tokens with text. A bound slot, an unbound slot with options, or a role that no token states is stated nowhere in the sentence (a boolean member, an adjectival fold dropped whole, an open role with no count), and a client offers it apart from the sentence with its current value. On the envelope plan a token with no part_index states its refs for every part it stands for" + }, + "distinguishes": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Distinguishes", + "description": "true when this token's text differs from the same-bucket text on another candidate in the same CandidateSet; null or omitted on every other token, including every token on a Spec rendered outside a candidate set" + }, + "part_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Part Index", + "description": "this token's position in Resolution.parts, when this plan is the envelope-level composed sentence (Resolution.sentence_plan) and this token belongs to exactly one part's own contribution -- a variable phrase token, or a qualifier attached to it because it did not agree across every part, or a token of a part composed as its own sentence. Null carries four distinct readings a client must not conflate: on a part's own plan (DefinitePart.spec.resolved.sentence_plan, or the candidates/no_data/unsupported sentence_plan on _PartBase) the field has no meaning at all and is never set; on a composer-minted token, it means the token belongs to the sentence as a whole rather than to any one part (the Oxford-joined ' and '/', ', the plan's own terminal '.', the shared ' ' the per-part fallback puts between two sentences, the 'coverage' opener, and an assumptions clause's lead, separators and '.' when no one part carries every item it names are all such tokens); on a token every contributing part states alike and the join states once (a hoisted qualifier on the where, when, or source axis, each a wire value of axis, or the origin role, identified by role=='origin' instead since SentenceAxis has no 'origin' member; a shared possessive lead; the shared byline; or a heading or byline token of a part a later part folded into, binding_folded, which both parts state) it means the token no longer describes a single variable; and on an 'assumption' item it means more than one part assumed it, and each part's own assumptions list says which." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "kind", + "text" + ], + "title": "SentenceToken", + "description": "One token in the ordered sentence plan: a \"text\" token (invariant\nwording such as a connective, a bare separator, the terminal period, or a\ndeparture sentence) or a \"slot\" token (a slot- or entity-bound phrase, or\nthe wording of an ambiguous entity).\n\n``rendered_sentence`` (the flat string) is the plain concatenation of every\ntoken's ``text``, in order. The two are computed together and cannot drift.\nA \"slot\" token with nothing bound appears too, with ``text=\"\"``: the same\ntoken structure serves a loading skeleton (before binding is known) and the\nfinal sentence (after it is). The first non-empty token's text is\ncapitalised.\n\nEvery token belongs to one ``segment``. The heading states what the answer\nis: actor, measure noun, counterpart, and period, in possessive order, one\nslot token per axis (\"Germany's gross ODA disbursements to Kenya, 1973 to\n2024\"). A unit that changes the magnitude (per capita, percent of GDP, PPP\ninternational dollars) stays in the heading. The byline follows it: the\nlatest-year label when one applies, the plain unit with its price basis\n(\"current US dollars\", \"constant 2022 US dollars\") as a slot token with\naxis \"unit\", the source, and, when the identity binds measurementMethod, the\nmethod as a slot token with axis \"method\". Departures come next, then the\nassumptions clause, and both sit only on a part's or the envelope's sentence, so\n``spec.resolved.sentence_plan`` carries neither." + }, + "Series": { + "properties": { + "measurement_method": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "null when no facet states a method: no stated method" + }, + "observation_period": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Observation Period" + }, + "scaling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Scaling" + }, + "first_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Year" + }, + "last_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Year" + }, + "places": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Places", + "description": "null for a role-bearing variable" + }, + "observations": { + "type": "integer", + "title": "Observations" + }, + "units": { + "$ref": "#/components/schemas/UnitsFold" + }, + "binding": { + "$ref": "#/components/schemas/Binding" + } + }, + "type": "object", + "required": [ + "measurement_method", + "observation_period", + "scaling", + "first_year", + "last_year", + "places", + "observations", + "units", + "binding" + ], + "title": "GraphAvailabilitySeries", + "description": "A source's facets sharing a measurement method, period and scaling." + }, + "SeriesAxisRef": { + "properties": { + "property": { + "type": "string", + "title": "Property", + "description": "the constraint property's dcid, e.g. 'crsPurpose'" + }, + "ref": { + "type": "string", + "title": "Ref", + "description": "the dcid of the value the StatVar holds on property" + }, + "label": { + "type": "string", + "title": "Label", + "description": "display label for ref: its graph label, else the dcid's tail split into lower-case words" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "property", + "ref", + "label" + ], + "title": "SeriesAxisRef", + "description": "One constraint of a series' StatVar (see ObservationSeries.axes)." + }, + "SeriesConversionFallbackExample": { + "properties": { + "entity": { + "type": "string", + "title": "Entity", + "description": "the entity dcid absent from the deflator table" + }, + "fallback_entity": { + "type": "string", + "title": "Fallback Entity", + "description": "the recipe's fallback entity substituted for it" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "entity", + "fallback_entity" + ], + "title": "SeriesConversionFallbackExample", + "description": "One entity a converted series' recipe substituted with its own\nfallback entity, because the substituted entity carried no row at all\nin the deflator table (see ObservationSeriesConversion.fallback_examples)." + }, + "SeriesEntityRef": { + "properties": { + "role": { + "type": "string", + "enum": [ + "observationAbout", + "origin", + "destination" + ], + "title": "Role", + "description": "observationAbout, origin, or destination" + }, + "ref": { + "type": "string", + "title": "Ref", + "description": "the entity's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "best-effort display label for ref; None when unresolved, never fabricated" + }, + "party_kind": { + "anyOf": [ + { + "type": "string", + "enum": [ + "party", + "total", + "residual" + ] + }, + { + "type": "null" + } + ], + "title": "Party Kind", + "description": "on an origin or destination entity, what the party is beside the others on its side: 'party' (a country, territory or organisation), 'total' (other parties' figures, so a sum across the role that counts it counts its members twice) or 'residual' (figures no other party holds), as the code index lists it. Absent for a party the index does not list, and on observationAbout" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "role", + "ref" + ], + "title": "SeriesEntityRef", + "description": "One entity in a series' role tuple (see ObservationSeries.entities)." + }, + "SeriesFacetRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the facet's dcid for this axis" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "best-effort display label for ref; None when unresolved, never fabricated" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/SourceRef" + }, + { + "type": "null" + } + ], + "description": "provenance axis only: the organisation behind the provenance, from the origin catalogue; absent for a provenance the catalogue does not list" + }, + "data_commons": { + "anyOf": [ + { + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + }, + { + "type": "null" + } + ], + "description": "provenance axis only: the Data Commons the provenance's data comes from; absent for a provenance the catalogue does not list" + }, + "documentation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Documentation", + "description": "provenance axis only: the Graph API route of the provenance's document, GET /api/graph/documentation/{dcid}" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "SeriesFacetRef", + "description": "One axis's value on a single series' selected observation facet (see\nObservationSeries.facet)." + }, + "SeriesStatVarRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the StatVar dcid these points observe" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "a row's own distinguishing label: composed from ref's own constraint values when it has any beyond its shape's shared five-tuple, else ref's plain resolved display name; None when unresolved, never fabricated" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "SeriesStatVarRef", + "description": "A series' StatVar identity ({ref, label} -- mirrors SeriesFacetRef's shape)." + }, + "ServedMember": { + "properties": { + "ref": { + "type": "string", + "pattern": "^dcid:", + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Roles" + }, + "constraints": { + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "object", + "title": "Constraints" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label", + "roles", + "constraints" + ], + "title": "ServedMember", + "description": "One StatVar a definition serves: its `dcid:`-prefixed `ref`, as the manifest trace's\n`resolved_stat_vars` names it, its graph `label` (`null` when the graph holds none), the\n`roles` it declares, and its `constraints`, each constraint property with its value\n(`null` when the StatVar leaves it unbound)." + }, + "Shape": { + "properties": { + "shape_id": { + "type": "string", + "title": "Shape Id", + "description": "stable id of this structural family" + }, + "label": { + "type": "string", + "title": "Label", + "description": "plain-language name of what the reading serves: a composed measure label, the served series' name, or the family's name" + }, + "population_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the graph populationType; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" + }, + "measured_property": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the graph measuredProperty; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" + }, + "stat_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the graph statType, e.g. measuredValue; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" + }, + "measurement_qualifier": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "structural anchor; present only when the measured property is qualified" + }, + "measurement_denominator": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "a structural anchor, present only on a ratio or per-capita measure. Holds the measurementDenominator arc's target dcid for a resolved StatVar or for a dangling target that itself carries a dcid. Is None both when no denominator arc exists at all and when the arc's target carries no dcid. A null value here does not by itself establish that no denominator arc exists. Read measurement_denominator_unresolved alongside it to tell the two apart" + }, + "measurement_denominator_unresolved": { + "type": "boolean", + "title": "Measurement Denominator Unresolved", + "description": "true when the measurementDenominator arc is present and its target is a ProvisionalNode the graph defines no real StatVar for, whether or not that target carries a dcid. False when no denominator arc exists at all, or when the arc names a confirmed StatVar. A client should read this flag before trusting measurement_denominator on its own. A null ref is consistent with either no arc (this flag false) or a dcid-less dangling target (this flag true), and a populated ref is consistent with either a confirmed StatVar (this flag false) or a dcid-bearing dangling target (this flag true)", + "default": false + }, + "slot_keys": { + "items": { + "$ref": "#/components/schemas/SlotKey" + }, + "type": "array", + "title": "Slot Keys", + "description": "the constraint and facet slots this family exposes, in display order" + }, + "member_count": { + "type": "integer", + "title": "Member Count", + "description": "the size of the resolved population behind this response: how many StatVars the shape's current bindings admit, narrowing as a slot binds and widening again as one is cleared" + }, + "member_digest": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Member Digest", + "description": "lowercase sha256 hex of the RFC 8785 (JCS) canonical JSON of the sorted list of bare dcids (no 'dcid:' prefix) of the family a Datasets mint of this Spec's definition resolves, the mint's trace.family_member_digest: every row of the family the code index resolves, or every member the mint's member walk confirms when it read every candidate. Null when Search did not settle that family for this definition, and when its walk proved the members from a window it did not read to the end, so it cannot name every member of the family" + }, + "refine_supported": { + "type": "boolean", + "title": "Refine Supported", + "description": "true unless the shape's StatVar(s) are ratio-backed (with _AsAFractionOf_ tokens), which construct-and-confirm sibling StatVars cannot refine", + "default": false + }, + "data_commons": { + "items": { + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + }, + "type": "array", + "title": "Data Commons", + "description": "every Data Commons holding admitted data for a member StatVar, in the order dfo, base, un_system; a Data Commons by Google variable lists dfo as well when the Observatory's own imports hold it. Empty when the engine derived the shape without its members" + }, + "upstream": { + "anyOf": [ + { + "$ref": "#/components/schemas/ShapeUpstream" + }, + { + "type": "null" + } + ], + "description": "the one source and Data Commons every member's data comes through, present only for a shape outside the Observatory's own imports whose members the origin catalogue places under exactly one source" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "shape_id", + "label", + "slot_keys", + "member_count" + ], + "title": "Shape", + "description": "The structural family chosen for the query." + }, + "ShapeUpstream": { + "properties": { + "source": { + "$ref": "#/components/schemas/SourceRef", + "description": "the organisation behind every member's data" + }, + "data_commons": { + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef", + "description": "the Data Commons serving that data" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "source", + "data_commons" + ], + "title": "ShapeUpstream", + "description": "The one source, and the Data Commons serving it, behind every member of\nan upstream shape." + }, + "SimpleUnit": { + "properties": { + "ref": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Ref" + }, + "currency": { + "type": "string", + "pattern": "^[A-Z]{3}$", + "title": "Currency" + }, + "label": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Label" + }, + "at_mint": { + "type": "boolean", + "const": true, + "title": "At Mint" + }, + "prices": { + "type": "string", + "enum": [ + "current", + "constant" + ], + "title": "Prices" + }, + "base_year": { + "type": "integer", + "maximum": 2100.0, + "minimum": 1900.0, + "title": "Base Year" + } + }, + "additionalProperties": false, + "type": "object", + "title": "SimpleUnit", + "description": "A unit by reference, by currency, or both, with optional words.\n\n`ref` is the unit's dcid. `currency` is an ISO 4217 code, which a converted unit\n`{currency, prices, base_year}` names in place of a dcid. `prices` says whether money is\nin `current` or `constant` prices, and `base_year` names the year constant prices are\nexpressed in; it is present exactly when prices are constant." + }, + "Skill": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "the skill's stable id; the key this entry is filed under" + }, + "name": { + "type": "string", + "title": "Name", + "description": "the skill's declared name" + }, + "description": { + "type": "string", + "title": "Description", + "description": "the skill's declared description" + }, + "content_version": { + "type": "string", + "title": "Content Version", + "description": "sha256: over the skill's manifest, SKILL.md then its references in path order, so any edit to any file in the bundle changes it" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "name", + "description", + "content_version" + ], + "title": "Skill", + "description": "One skill's front matter on the wire, keyed by id in\nResolution.skills. Mirrors skills_index.SkillFrontMatter's four\nmembers -- the search API's own wire model, not that dataclass itself,\nso it carries its own field descriptions the way every other response\nmodel does." + }, + "Slot": { + "properties": { + "key": { + "$ref": "#/components/schemas/SlotKey", + "description": "the slot's typed identity (axis + property + label)" + }, + "binding": { + "oneOf": [ + { + "$ref": "#/components/schemas/BindingValue" + }, + { + "$ref": "#/components/schemas/BindingSet" + }, + { + "$ref": "#/components/schemas/BindingUnbound" + } + ], + "title": "Binding", + "description": "exactly one of the three binding states", + "discriminator": { + "propertyName": "kind", + "mapping": { + "set": "#/components/schemas/BindingSet", + "unbound": "#/components/schemas/BindingUnbound", + "value": "#/components/schemas/BindingValue" + } + } + }, + "expansion": { + "anyOf": [ + { + "$ref": "#/components/schemas/Expansion" + }, + { + "type": "null" + } + ], + "description": "codes the resolver admitted beyond this slot's own bound value(s), when the bound value's code system is declared hierarchical; None for every other slot, including one bound on a flat code system (e.g. crsTypeOfFlow) or a property the deployment's code index does not carry at all. Reports resolution-time breadth only -- `binding` alone is what the query asked for and what spec identity hashes." + }, + "summable": { + "type": "boolean", + "title": "Summable", + "description": "true when the datasets door's `groupby` sums the family's members over this slot into one complete series: the slot's property is a code system the deployment's code index declares summable (capabilities `summable_axes`), and the dataset the family is served from declares that an observation it carries no row for reads as zero, so a member with no rows adds nothing. False for every other property, for the property that classifies a dataset's rows, and for every slot of a family whose dataset declares no such reading, where a member with no rows refuses the sum. Independent of the binding, so an unbound, set or value-bound slot reads alike. Spec identity does not hash it.", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "key", + "binding" + ], + "title": "Slot", + "description": "One slot in the chosen shape, with its current binding state." + }, + "SlotKey": { + "properties": { + "axis": { + "type": "string", + "enum": [ + "what", + "how", + "where", + "when", + "source" + ], + "title": "Axis", + "description": "the slot grammar axis" + }, + "property": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the constraint property that defines this slot when one exists; null or omitted for when, source, and the where-axis slot that binds the subject/destination entity directly (no constraint property backs it)" + }, + "label": { + "type": "string", + "title": "Label", + "description": "human label, e.g. purpose, donor" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "axis", + "label" + ], + "title": "SlotKey", + "description": "A slot's typed identity: axis, constraint property, and human label." + }, + "SlotOption": { + "properties": { + "value": { + "$ref": "#/components/schemas/SlotValue", + "description": "one taxonomy member or observed facet value" + }, + "coverage": { + "anyOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/CoverageExact" + }, + { + "$ref": "#/components/schemas/CoverageBreadth" + }, + { + "$ref": "#/components/schemas/CoverageBare" + } + ], + "discriminator": { + "propertyName": "kind", + "mapping": { + "bare": "#/components/schemas/CoverageBare", + "breadth": "#/components/schemas/CoverageBreadth", + "exact": "#/components/schemas/CoverageExact" + } + } + }, + { + "type": "null" + } + ], + "title": "Coverage", + "description": "this option's observation footprint if it were bound instead of the current value; populated when response_options.include_option_coverage is true" + }, + "relation": { + "anyOf": [ + { + "type": "string", + "enum": [ + "child", + "parent", + "root" + ] + }, + { + "type": "null" + } + ], + "title": "Relation", + "description": "where this option sits in a level-scoped constraint-slot menu on a code-index-carried taxonomy: 'child' or 'parent' of the slot's bound value, and 'root' for every other classification root beside a bound root; for an unbound hierarchical slot, 'root' for a classification root and 'child' for a child of the root named in parent; 'root' for every value of a flat code system. None on every other surface this type serves -- entity_options, facet_options, and the options door's OptionsSet -- none of which classify their candidates by level" + }, + "parent": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Parent", + "description": "dcid of this option's parent in a hierarchical code system, for a level-scoped constraint-slot option that has one; None for a root, for a flat code system's values, and on every surface where relation is None" + }, + "member_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Member Count", + "description": "how many StatVars this index holds coded directly to this option's value (not a subtree rollup), for a level-scoped constraint-slot option; None on every other surface this type serves -- entity_options, facet_options, and the options door's OptionsSet -- none of which count members from the code index" + }, + "served_rows": { + "anyOf": [ + { + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Served Rows", + "description": "the rows this answer's file would hold if this option were bound instead of the current value, in the terms of ResolvedSpec.download.rows: one per series and year with a point inside the requested window, or under 'latest' one per series holding its StatVar's latest year. A series is a served StatVar carrying the option or one of its code-index descendants (the widening the binder applies to a bound value) at one entity, or donor and recipient pair. An unbound slot counts the answer's own family; a bound slot counts the family with that slot left unbound and every other binding kept. An option this answer would serve nothing for is omitted from the menu, except the slot's current value. None where the option is not counted: on entity_options, facet_options and the options door, and on a bound slot whose family needs graph reads to count, where a trailing slot_options event can supply it. A StatVar the coverage artifact does not hold adds no rows: the count covers the pick's other StatVars, and an option all of whose StatVars are missing from the artifact is omitted" + }, + "served_rows_exact": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Served Rows Exact", + "description": "true when served_rows equals the download.rows a pick of this option would state; false when it is an upper bound: a counted StatVar whose series sit in more than one facet group (provenance, method and unit) in the window, of which the pick's read elects one; an answer read in bulk whose pick's StatVars sit in more than one facet, since a bulk read elects one; under 'latest', a StatVar with a facet observed more often than yearly; an answer that pins a facet value; a unit request whose conversion cannot be read as download.rows_exact describes, that converts a counted series from a currency the answer does not serve, or whose options the coverage probe counts (a bound slot of a subject-place family, a candidates reading); or a series whose facets carry no complete date list. Null exactly when served_rows is null" + }, + "party_kind": { + "anyOf": [ + { + "type": "string", + "enum": [ + "party", + "total", + "residual" + ] + }, + { + "type": "null" + } + ], + "title": "Party Kind", + "description": "on an origin or destination entity option, what the party is beside the others on its side: 'party' (a country, territory or organisation), 'total' (other parties' figures, so a sum across the role that counts it counts its members twice) or 'residual' (figures no other party holds), as the code index lists it. Absent for a party the index does not list, and on every other option" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "value" + ], + "title": "SlotOption", + "description": "One candidate value the binder had available for a slot." + }, + "SlotOptions": { + "properties": { + "key": { + "$ref": "#/components/schemas/SlotKey", + "description": "the slot identity this option set belongs to" + }, + "options": { + "items": { + "$ref": "#/components/schemas/SlotOption" + }, + "type": "array", + "title": "Options", + "description": "candidate values, in taxonomy order; a dcid that failed to resolve a label is omitted rather than fabricated. For a level-scoped constraint slot (relation is populated), this is the bound value's children and parent (for a bound root, its children and every other root), or, when the slot is unbound, each classification root followed by its children -- never deeper levels. A counted menu omits every option its answer would serve nothing for except the slot's current value (see SlotOption.served_rows)" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "false when options is the full known set for this slot at its current level (a curated seed taxonomy, a level-scoped taxonomy sourced from the packaged code index, or an observed taxonomy from the same source, rather than the recalled candidates); true when options is only the values observed among the resolved candidates (bounded by the recall cut, not exhaustive)" + }, + "source": { + "type": "string", + "enum": [ + "observed", + "seed" + ], + "title": "Source", + "description": "'seed' for a hand-curated family taxonomy (e.g. dev-finance scheme/purpose); 'observed' for the union of values seen on the confirmed StatVars or resolved query entities" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "key", + "options", + "truncated", + "source" + ], + "title": "SlotOptions", + "description": "The full candidate set one slot was bound against.\n\nThe taxonomy the binder chose from and the options a client can offer the user\nare the same artifact; this is that artifact, surfaced per slot. ``key`` matches\nthe ``SlotKey`` of the corresponding entry in ``Spec.resolved.slots`` (join on axis and\n``property.ref``)." + }, + "SlotValue": { + "properties": { + "ref": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } + ], + "description": "the graph object bound, when the value is a graph object" + }, + "value_kind": { + "type": "string", + "enum": [ + "entity", + "enum_value", + "time_window", + "source", + "literal" + ], + "title": "Value Kind", + "description": "what kind of value this is" + }, + "time_window": { + "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, + { + "type": "null" + } + ], + "description": "present iff value_kind == time_window" + }, + "literal": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Literal", + "description": "present iff value_kind == literal" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "value_kind" + ], + "title": "SlotValue", + "description": "One taxonomy member or facet value bound to a slot." + }, + "SourceAvailability": { + "properties": { + "source": { + "$ref": "#/components/schemas/AvailabilitySource" + }, + "places": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Places", + "description": "the places covered by kind; null for a role-bearing variable, and while the places' kinds are unread (a transient gap)" + }, + "entities": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/EntityCounts" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Entities", + "description": "the entities covered per graph role; null for any other variable" + }, + "first_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Year" + }, + "last_year": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Year" + }, + "facets": { + "type": "integer", + "title": "Facets" + }, + "series": { + "items": { + "$ref": "#/components/schemas/Series" + }, + "type": "array", + "title": "Series" + } + }, + "type": "object", + "required": [ + "source", + "places", + "entities", + "first_year", + "last_year", + "facets", + "series" + ], + "title": "GraphAvailabilitySourceEntry", + "description": "One source's facets of the variable, and their series." + }, + "SourceBlock": { + "properties": { + "publisher": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the source arc's target; null when the node carries no source arc" + }, + "parent": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the isPartOf arc's target; null when the node has no parent Dataset" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "License" + }, + "license_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "License Type" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "source_data_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Data Url", + "description": "the sourceDataUrl arc's value" + }, + "description_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description Url", + "description": "the descriptionUrl arc's value" + }, + "transformation_logic_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Transformation Logic Url", + "description": "the dataTransformationLogic arc's value: a URL to the transformation code" + }, + "last_data_refresh_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Data Refresh Date", + "description": "the lastDataRefreshDate arc's value" + }, + "next_data_refresh_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Data Refresh Date", + "description": "the nextDataRefreshDate arc's value" + }, + "earliest_observation_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Earliest Observation Date", + "description": "the earliestObservationDate arc's value" + }, + "latest_observation_date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Latest Observation Date", + "description": "the latestObservationDate arc's value" + }, + "freshness": { + "$ref": "#/components/schemas/Freshness" + }, + "data_commons": { + "anyOf": [ + { + "$ref": "#/components/schemas/graph_api__origin_models__DataCommonsRef" + }, + { + "type": "null" + } + ], + "description": "the Data Commons serving this provenance, from the origin catalogue; null for a provenance the catalogue does not admit, a Dataset, or a Source" + }, + "documentation": { + "type": "string", + "title": "Documentation", + "description": "the path of the node's source document" + } + }, + "type": "object", + "required": [ + "publisher", + "parent", + "license", + "license_type", + "url", + "source_data_url", + "description_url", + "transformation_logic_url", + "last_data_refresh_date", + "next_data_refresh_date", + "earliest_observation_date", + "latest_observation_date", + "freshness", + "data_commons", + "documentation" + ], + "title": "GraphSourceBlock", + "description": "A Source, Dataset or Provenance's detail block. `documentation` is the path of the\nnode's source document on this API." + }, + "SourceCatalogue": { + "properties": { + "sources": { + "items": { + "$ref": "#/components/schemas/SourceCatalogueEntry" + }, + "type": "array", + "title": "Sources" + } + }, + "type": "object", + "required": [ + "sources" + ], + "title": "SourceCatalogue", + "description": "The full `GET /api/graph/sources` response: DFO's sources, then the\norigin registry's base Data Commons entries and UN System Data Commons\nagencies in registry order, each with the provenances the request's\norigin catalogue admits under it, grouped by Dataset. UN agencies are left\nout when the UN origin is off. The response has no count and no pagination." + }, + "SourceCatalogueEntry": { + "properties": { + "source": { + "$ref": "#/components/schemas/SourceNodeRef" + }, + "data_commons": { + "$ref": "#/components/schemas/graph_api__origin_models__DataCommonsRef" + }, + "datasets": { + "items": { + "$ref": "#/components/schemas/DatasetEntry" + }, + "type": "array", + "title": "Datasets" + }, + "exclusions": { + "items": { + "$ref": "#/components/schemas/Exclusion" + }, + "type": "array", + "title": "Exclusions" + } + }, + "type": "object", + "required": [ + "source", + "data_commons", + "datasets", + "exclusions" + ], + "title": "SourceCatalogueEntry", + "description": "One source on one Data Commons, with the datasets this deployment\nadmits under it and the provenances it excludes. DFO provenances and UN\nagencies exclude nothing here." + }, + "SourceCode": { + "properties": { + "provenance": { + "type": "string", + "title": "Provenance", + "description": "the provenance dcid of the publisher that issues the code" + }, + "code": { + "type": "string", + "title": "Code", + "description": "the publisher's series code, as the publisher writes it" + }, + "exact": { + "type": "boolean", + "title": "Exact", + "description": "true when the answer is the series the provenance files under this code and no other: a part naming the code as its source_code and the provenance as its source accepts this Spec as its answer. The answer reads its observations from the provenance alone, the provenance gives none of the code's StatVars another code, and every StatVar a Datasets mint of the Spec serves is one of the code's. False, the default, is omitted: the code names a StatVar the answer serves, and the answer may hold other series or data of another source", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "provenance", + "code" + ], + "title": "SourceCode", + "description": "A publisher's own series code for a StatVar, such as World Bank `DT.TDS.DEGG.CD`." + }, + "SourceDetails": { + "properties": { + "name_of_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name Of Source" + }, + "publisher": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Publisher" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/SourceNodeRef" + }, + { + "type": "null" + } + ], + "description": "the origin registry's source for the documented Provenances, null unless the origin catalogue admits every one of them and they share one" + }, + "data_commons": { + "anyOf": [ + { + "$ref": "#/components/schemas/graph_api__origin_models__DataCommonsRef" + }, + { + "type": "null" + } + ], + "description": "the Data Commons serving the documented Provenances, null unless the origin catalogue admits every one of them and they share one" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "source_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Url" + }, + "source_data_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Data Url", + "description": "the file the pipeline downloads, the source's `sourceDataUrl`" + }, + "citation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Citation", + "description": "the source's `licenseAttribution` text" + } + }, + "type": "object", + "required": [ + "name_of_source", + "publisher", + "source", + "data_commons", + "description", + "source_url", + "source_data_url", + "citation" + ], + "title": "SourceDetails" + }, + "SourceDocumentation": { + "properties": { + "details": { + "$ref": "#/components/schemas/SourceDetails" + }, + "license": { + "$ref": "#/components/schemas/SourceLicense" + }, + "scope_and_units": { + "$ref": "#/components/schemas/ScopeAndUnits" + }, + "methodology": { + "$ref": "#/components/schemas/Methodology" + }, + "data_notes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Data Notes", + "description": "one caveat per entry, as CommonMark" + }, + "usage": { + "$ref": "#/components/schemas/Usage" + }, + "transformation_log": { + "items": { + "$ref": "#/components/schemas/TransformationLogEntry" + }, + "type": "array", + "title": "Transformation Log" + }, + "version_history": { + "items": { + "$ref": "#/components/schemas/VersionHistoryEntry" + }, + "type": "array", + "title": "Version History" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "every member path that is null or empty for this source, in spec order, e.g. 'details.citation', 'scope_and_units.countries'" + }, + "document_errors": { + "items": { + "$ref": "#/components/schemas/DocumentErrorEntry" + }, + "type": "array", + "title": "Document Errors", + "description": "each Markdown document the source carries but this door could not serve" + } + }, + "type": "object", + "required": [ + "details", + "license", + "scope_and_units", + "methodology", + "data_notes", + "usage", + "transformation_log", + "version_history", + "gaps", + "document_errors" + ], + "title": "SourceDocumentation", + "description": "The full `GET /api/graph/documentation/{dcid}` response." + }, + "SourceLicense": { + "properties": { + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url", + "description": "the licence text on the publisher's site, the source's `license`" + }, + "update_cadence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Update Cadence" + }, + "last_update": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Update" + }, + "next_expected_update": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Expected Update" + } + }, + "type": "object", + "required": [ + "type", + "url", + "update_cadence", + "last_update", + "next_expected_update" + ], + "title": "SourceLicense" + }, + "SourceMention": { + "properties": { + "text": { + "anyOf": [ + { + "type": "string", + "maxLength": 120, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Text", + "description": "the user's words naming the source, e.g. 'IDS', 'the OECD' or 'World Bank', without the words that ask for its data ('World Bank' in 'World Bank debt data'). They are matched whole against the names of every admitted publisher, dataset and provenance, and their registered abbreviations, ignoring case, punctuation and a leading 'the'. Included words that match none resolve no_data with source_not_resolved. Excluded words that match none remove nothing and warn query_qualifier_dropped. Words that match two unrelated sources resolve no_data with source_ambiguous, listing both" + }, + "ref": { + "anyOf": [ + { + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Ref", + "description": "the reference this mention names, when the caller holds one (a provenance dcid, a catalogue Dataset ref or a Source ref), such as a restatement's resolved mention or a NoData.ambiguous_sources candidate carries. It skips matching `text`. A ref the origin catalogue does not admit refuses request_invalid with a pointer to it" + }, + "polarity": { + "type": "string", + "enum": [ + "include", + "exclude" + ], + "title": "Polarity", + "description": "include to answer from this source, exclude to answer from any other. A part with an included source answers from the included sources only. A part with exclusions alone answers from every admitted source but those", + "default": "include" + } + }, + "additionalProperties": false, + "type": "object", + "title": "SourceMention", + "description": "One data source a part names or excludes, as its words, a reference, or both." + }, + "SourceNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "source", + "title": "Kind", + "default": "source" + }, + "source": { + "$ref": "#/components/schemas/SourceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "source" + ], + "title": "SourceNode" + }, + "SourceNodeRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "string", + "title": "Label" + } + }, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "GraphSourceNodeRef", + "description": "A Data Commons `Source` node (`dc/s/*`). On the UN System Data Commons, where every\nagency sits under one source, it is the agency provenance (`undata/p/*`)." + }, + "SourceRef": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the source's dcid" + }, + "label": { + "type": "string", + "title": "Label", + "description": "the source's display name" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "label" + ], + "title": "SourceRef", + "description": "The organisation behind a provenance: the Source node its `source` arc\nnames on our Data Commons and on Data Commons by Google, or the agency\nprovenance itself on the UN System Data Commons." + }, + "Spec": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "deterministic hash of (shape + canonical slot bindings); permalink-safe, dedup key, golden-comparison handle, cache key" + }, + "definition": { + "$ref": "#/components/schemas/SpecDefinition", + "description": "the canonical definition this Spec was resolved from: {schema_version, identity}, the same shape Unsupported.definition uses. definition.identity is the identity-core projection this spec_id was minted from, serialised once and never re-derived; hashing it reproduces spec_id by construction. Post definition.identity back byte-for-byte as ResubmitIdentityPayload.identity to edit this Spec. Directional entities remain nested in identity.entities." + }, + "resolved": { + "$ref": "#/components/schemas/ResolvedSpec", + "description": "the engine's report of what it did with the ask: stat_vars, entities, coverage, trace, and every other display/diagnostic field. Never hashed; see ResolvedSpec" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "definition", + "resolved" + ], + "title": "Spec", + "description": "The unit of meaning: one named region of the graph.\n\nReused as the definite answer, each candidate, and NoData's own\nflagged_match/alternate_match (a plain Spec on both). See NoData's own\ndocstring for the failed-gate code each carries, NoData.gate, kept\nstructurally outside every identity path. NearestRealSpec (below)\nsubclasses Spec for NoData.nearest_real, adding the relaxation each\nsuggestion carries. That stays structurally outside every identity path\nthe same way (spec_id is computed from bindings, never from the model),\nso it cannot perturb spec_id." + }, + "SpecAlternativeMeasure": { + "properties": { + "definition": { + "$ref": "#/components/schemas/SpecDefinition", + "description": "the alternative measure's own {schema_version, spec_id, identity}" + }, + "label": { + "type": "string", + "title": "Label", + "description": "readable text for this option, distinct from every other entry's on the same axis. A 'what' entry names the measure without its price basis ('net disbursements'), and differs from measure_label; a 'unit' entry names the prices it switches to ('constant prices')" + }, + "axis": { + "type": "string", + "enum": [ + "what", + "unit" + ], + "title": "Axis", + "description": "the sentence token whose menu offers this entry: 'what', the measure noun, or 'unit', the byline's unit token (SentenceToken.axis 'unit', binding_ref 'unit:'), for a partition that differs from this Spec's only in price basis" + }, + "measure_axis_values": { + "items": { + "$ref": "#/components/schemas/MeasureAxisValue" + }, + "type": "array", + "title": "Measure Axis Values", + "description": "every axis this measure's partition holds a value on, with that value, in measure-axis declaration order; the same projection as ResolvedSpec.measure_axis_values" + }, + "served_rows": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Served Rows", + "description": "the rows a resubmit of `definition` would write at this Spec's bound roles, in the terms of download.rows: one per series and year with a point inside the requested window, or under 'latest' one per series holding its StatVar's latest year, a series being a served StatVar at one entity, or donor and recipient pair. A Spec that merges several answers counts at every entity its answers bind. A StatVar the coverage artifact does not hold adds no rows, and a measure that would serve none, including one whose StatVars are all missing from the artifact, is not listed. None where the count needs graph reads (a subject-place family, or a family the code index does not decide), or where the merged answers read different years or coverage" + }, + "served_rows_exact": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Served Rows Exact", + "description": "true when served_rows equals the download.rows of a resubmit of `definition`; false when it is an upper bound: a counted StatVar whose series sit in more than one facet group (provenance, method and unit) in the window; an answer read in bulk whose measure's StatVars sit in more than one facet; under 'latest', a StatVar with a facet observed more often than yearly; an answer that pins a facet value; or a unit request whose conversion cannot be read as download.rows_exact describes, or that converts a counted series from a currency the answer does not serve. Null exactly when served_rows is null" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "definition", + "label", + "axis", + "measure_axis_values" + ], + "title": "SpecAlternativeMeasure", + "description": "One other measure this Spec could equally answer with (see\nResolvedSpec.alternative_measures): either another populated partition\nfrom the same family as the one this Spec's own served rows exhibit, or\na genuinely distinct also_plausible candidate whose only difference from\nthis Spec is measured_property (measurement_denominator held equal),\nfolded in here instead of left as a second candidates entry. Carries its\nown identity and a label that disambiguates it.\n\n`definition` is minted by editing this Spec's own already-minted\nidentity onto this partition's measure axes (retrieval.bound_values.\nmint_sibling_identity), an index-scan projection, not a resolution.\nCarries identity and a label only: no stat_vars, no coverage, no trace.\nResolvedSpec's own required fields have no defaults, so producing one as\na Spec would mean fabricating a resolution that never ran.\n\nPost `definition` back as `identity` on a dataset_resubmit identity entry to\nswitch onto this measure: the identity's own what/how slots (this\npartition's per-partition-declared axes included, e.g. CRS cooperation\nmodality) name the family the packaged code index's own election\nrecovers members from, the same recovery a resubmit of this Spec's own\nidentity uses.\n\n`axis` names the sentence token whose menu offers the entry. A partition\nthat differs from this Spec's only in price basis (`measurementQualifier`\n`Nominal` or `RealValue`) is a unit option, axis \"unit\", offered by the\nbyline's unit token (binding_ref \"unit:\"). Every other entry is a measure\noption, axis \"what\". The measure menu holds one entry per measure\nwhatever its price basis, so no two \"what\" entries differ only in price\nbasis." + }, + "SpecDefinition": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version this definition was published under; exactly 1", + "default": 1 + }, + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "the spec_id minted from `identity`; equals the sibling Spec.spec_id, and is what a detached definition (registry row, permalink) is keyed by" + }, + "identity": { + "$ref": "#/components/schemas/BaseIdentity", + "description": "the identity-core projection this Spec's spec_id was minted from, serialised once and never re-derived; post it back byte-for-byte as ResubmitIdentityPayload.identity to edit this Spec. Directional edits change identity.entities.origin or identity.entities.destination directly" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "identity" + ], + "title": "SpecDefinition", + "description": "The canonical definition a Spec was resolved from: `{schema_version,\nspec_id, identity}`. This is the form the registry stores and permalinks\ncarry, so it is self-contained. A definition lifted out of its Spec still\nnames which spec it is.\n\n`identity` is the identity-core projection (see `BaseIdentity`) this\nSpec's spec_id was minted from, so hashing `identity` again reproduces\n`spec_id` by construction.\n\n`spec_id` is carried here as well as on `Spec.spec_id` deliberately: the\nduplication is what makes the definition independently meaningful once\ndetached from the response that delivered it. The one exception is an\n`unsupported` response's definition, which omits it: the request was\nvalid and understood but never became a resolvable construction, so no\nspec_id was ever legitimately minted for it." + }, + "SpecIdInput": { + "properties": { + "kind": { + "type": "string", + "const": "spec_id", + "title": "Kind", + "default": "spec_id" + }, + "spec_id": { + "type": "string", + "pattern": "^spec_", + "title": "Spec Id" + }, + "definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CanonicalDefinition" + }, + { + "type": "null" + } + ] + }, + "scope": { + "anyOf": [ + { + "$ref": "#/components/schemas/Scope-Input" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id" + ], + "title": "SpecIdInput", + "description": "`kind: \"spec_id\"` -- an id already in the registry, with an optional\ncanonical `definition` sidecar. `definition.spec_id`, when supplied,\nmust equal the outer `spec_id`; the sidecar is required only when the\nregistry does not already hold `spec_id`." + }, + "SpecObservations": { + "properties": { + "series": { + "items": { + "$ref": "#/components/schemas/ObservationSeries" + }, + "type": "array", + "title": "Series", + "description": "one entry per (stat_var, role tuple) pair with observations" + }, + "total_obs": { + "type": "integer", + "title": "Total Obs", + "description": "total observation count across every series' SELECTED facet, window-filtered to the spec's requested window when one exists -- known even when truncated is true and points are truncated. For a windowed per-pair answer, this is the chosen facet's in-window point count, NOT a raw facet obs_count sum and NOT a union across every facet of the pair -- see ObservationSeries. For a scope-defaulted bulk latest-only answer (no requested window), this sums the coverage probe's all-time obs_count per delivered entity instead: with no window to narrow it, that raw obs_count IS the in-window count" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "false when every series above carries its FULL point set (the whole answer's point count was within the server's inline threshold and each series within its row limit); true when a series was truncated to its latest points only, its total_obs still counting every point" + }, + "omitted": { + "anyOf": [ + { + "$ref": "#/components/schemas/ObservationsOmission" + }, + { + "type": "null" + } + ], + "description": "why this payload carries no series, when it doesn't; absent when series is genuinely populated. See ObservationsOmission's own docstring" + }, + "order": { + "anyOf": [ + { + "type": "string", + "enum": [ + "ranked", + "fixed" + ] + }, + { + "type": "null" + } + ], + "title": "Order", + "description": "how a role-bearing bulk preview chose the series it shows when it shows fewer than the answer holds: 'ranked' when it read every series and shows the most recent and largest (latest year, then latest value, then identity), 'fixed' when it shows a selection made before any value was read, StatVars newest year first and taken round-robin; absent when every series is shown or the preview is not a role-bearing bulk one" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "series", + "total_obs", + "truncated" + ], + "title": "SpecObservations", + "description": "The observation values behind a Spec's coverage.\n\nAn opt-in bounded preview, or the full series when the resolved answer is\nsmall enough to ship in full -- see truncated. Describes the SAME (stat_var,\nentity) selection Spec.resolved.coverage already reports, so the numbers here never\ndescribe a different variable than what coverage summarises.\n\nEach series carries one lead observation facet's points, never a union\nacross facets: a StatVar/entity pair can have several reporting facets\n(e.g. commitments vs disbursements, current vs constant prices), and\nmerging their points chronologically would interleave same-dated points\nfrom incompatible series into one meaningless line. The one exception is\nthe same source's estimates continuing the lead past its last period: the\nseries carries their points after the lead's, `facet` names the lead, and\nthe `modelled_values` departure marks the estimates. One facet group is\nselected per StatVar instead, across every place and role tuple the answer\nnames: among facets holding a point in the requested years (all facets when\nnone does), DFO's facets first for a variable both DFO and base Data\nCommons hold, then the one covering the most places or role tuples there,\nthen the most requested years, then the most observations, then the latest\nobservation, then a deterministic tie-break." + }, + "StatVarBlock": { + "properties": { + "definition": { + "$ref": "#/components/schemas/VariableDefinition" + }, + "availability": { + "anyOf": [ + { + "$ref": "#/components/schemas/Availability" + }, + { + "type": "null" + } + ], + "description": "where DFO holds observations of the variable; null, and named in gaps, when its read failed or the coverage index is not loaded" + } + }, + "type": "object", + "required": [ + "definition", + "availability" + ], + "title": "GraphStatVarBlock", + "description": "A variable's detail block: what it measures and where DFO holds observations of it." + }, + "StatVarNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "stat_var", + "title": "Kind", + "default": "stat_var" + }, + "stat_var": { + "$ref": "#/components/schemas/StatVarBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "stat_var" + ], + "title": "StatVarNode" + }, + "StatVarSetInput": { + "properties": { + "kind": { + "type": "string", + "const": "statvar_set", + "title": "Kind", + "default": "statvar_set" + }, + "statvars": { + "items": { + "type": "string", + "pattern": "^dcid:" + }, + "type": "array", + "maxItems": 1, + "minItems": 1, + "title": "Statvars" + }, + "scope": { + "anyOf": [ + { + "$ref": "#/components/schemas/Scope-Input" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "statvars" + ], + "title": "StatVarSetInput", + "description": "`kind: \"statvar_set\"` -- resolves one `dcid:`-prefixed StatVar to its\nregistered shape and mints a fully pinned spec for it. `statvars` holds\nexactly one StatVar." + }, + "Step": { + "properties": { + "id": { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$", + "title": "Id" + }, + "op": { + "type": "string", + "pattern": "^[a-z][a-z0-9_]{0,63}$", + "title": "Op" + }, + "stat_var": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Stat Var" + }, + "input": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$" + }, + { + "$ref": "#/components/schemas/VersionRef" + } + ], + "title": "Input" + }, + "inputs": { + "patternProperties": { + "^[a-z][a-z0-9_]{0,63}$": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$" + }, + { + "$ref": "#/components/schemas/VersionRef" + } + ] + } + }, + "type": "object", + "maxProperties": 8, + "minProperties": 1, + "title": "Inputs" + }, + "sides": { + "patternProperties": { + "^[a-z][a-z0-9_]{0,63}$": { + "additionalProperties": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "propertyNames": { + "maxLength": 64, + "minLength": 1 + }, + "type": "object", + "maxProperties": 16 + } + }, + "type": "object", + "maxProperties": 8, + "minProperties": 1, + "title": "Sides" + }, + "policy": { + "type": "string", + "pattern": "^[a-z][a-z0-9_]{0,63}$", + "title": "Policy" + }, + "params": { + "patternProperties": { + "^[a-z][a-z0-9_]{0,63}$": { + "$ref": "#/components/schemas/JsonValue" + } + }, + "type": "object", + "maxProperties": 32, + "title": "Params" + }, + "options": { + "patternProperties": { + "^[a-z][a-z0-9_]{0,63}$": { + "$ref": "#/components/schemas/JsonValue" + } + }, + "type": "object", + "maxProperties": 32, + "title": "Options" + }, + "kept": { + "patternProperties": { + "^[a-z][a-z0-9_]{0,63}$": { + "type": "integer", + "minimum": 0.0 + } + }, + "type": "object", + "maxProperties": 16, + "title": "Kept" + }, + "left_out": { + "items": { + "$ref": "#/components/schemas/LeftOut" + }, + "type": "array", + "maxItems": 32, + "title": "Left Out" + }, + "period_coverage": { + "items": { + "$ref": "#/components/schemas/PeriodCoverage" + }, + "type": "array", + "maxItems": 500, + "title": "Period Coverage" + }, + "entity_coverage": { + "items": { + "$ref": "#/components/schemas/EntityCoverage" + }, + "type": "array", + "maxItems": 500, + "title": "Entity Coverage" + }, + "choice": { + "$ref": "#/components/schemas/Choice" + }, + "summed": { + "$ref": "#/components/schemas/Summed" + }, + "converted_from": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleUnit" + }, + { + "$ref": "#/components/schemas/ComposedUnit" + }, + { + "type": "null" + } + ], + "title": "Converted From" + }, + "unit": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleUnit" + }, + { + "$ref": "#/components/schemas/ComposedUnit" + }, + { + "type": "null" + } + ], + "title": "Unit" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "op" + ], + "title": "Step", + "description": "One operation: its inputs by role, its one fixed policy, the caller's own choices,\nwhat it kept, what data gaps it left out, the unit it produces, and, for an operation\nthat writes a new variable (sum, quotient, share, comparison), that variable's bare dcid in\n`stat_var`.\n\nA step takes either `input` or `inputs`, or neither, never both. `stat_var` is the bare\ndcid of the variable a step that makes a new one (a sum, quotient, share or comparison)\nwrites its rows under. `sides` holds, by input role, each role column whose slice of that\ninput holds one entity, with that entity's ref. A comparison records it." + }, + "StepRef": { + "properties": { + "ref": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Ref" + }, + "label": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Label" + }, + "at_mint": { + "type": "boolean", + "const": true, + "title": "At Mint" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref" + ], + "title": "StepRef", + "description": "A reference: the dcid or id it names, and optionally the words for it.\n\n`at_mint` marks a label taken from the evidence stored when the version was made." + }, + "SubregionNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "subregion", + "title": "Kind", + "default": "subregion" + }, + "subregion": { + "$ref": "#/components/schemas/PlaceBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "subregion" + ], + "title": "SubregionNode" + }, + "Summed": { + "properties": { + "count": { + "type": "integer", + "minimum": 0.0, + "title": "Count" + }, + "variables": { + "items": { + "$ref": "#/components/schemas/StepRef" + }, + "type": "array", + "maxItems": 64, + "title": "Variables" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "count", + "variables" + ], + "title": "Summed", + "description": "A sum at mint: how many variables were summed, and up to 64 of them." + }, + "TimeWindow": { + "properties": { + "start_year": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Start Year", + "description": "absent means open-ended start" + }, + "end_year": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "End Year", + "description": "absent means open-ended end (to latest)" + } + }, + "additionalProperties": false, + "type": "object", + "title": "TimeWindow", + "description": "A date window. Absence of a bound means open-ended in that direction." + }, + "Timing": { + "properties": { + "total": { + "type": "integer", + "title": "Total", + "description": "total latency in milliseconds, at whichever scope this sits" + }, + "by_step": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "By Step", + "description": "per-step latency in ms" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "total" + ], + "title": "Timing", + "description": "Latency breakdown, reused at two scopes: the envelope's own\ndiagnostics.timing_ms, where total is the whole request's wall-clock\nelapsed time and by_step names the steps that run once per request,\nshared across every part (e.g. extract), and a part's own timing_ms,\nwhere total sums that part's own by_step values and by_step names only\nthe phases that part ran, excluding the shared steps already reported\non the envelope. A part's shape_arcs, shape_probe, shape_probe_coverage,\nshape_labels, shape_groups and shape_admission steps are nested inside\nits shape step, so its total leaves them out." + }, + "TraceConversion": { + "properties": { + "recipe": { + "type": "string", + "title": "Recipe", + "description": "the conversion recipe class that ran" + }, + "input_tables": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Input Tables", + "description": "the input series/table dcids the recipe combined, keyed by role" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "recipe", + "input_tables" + ], + "title": "TraceConversion", + "description": "A Spec-level record of a unit-conversion recipe. The engine converts\nper series and records each converted series' recipe and tables in\nObservationSeries.conversion, since one Spec's series can convert under\ndifferent recipes. ResolutionTrace.conversion is modelled here but always\nabsent. Capabilities.recipe_classes lists the recipe members this\ndeployment applies." + }, + "TraceDefaultReading": { + "properties": { + "applied": { + "type": "boolean", + "title": "Applied", + "description": "false when a phrase the request dropped uses a price-basis word no qualifier match read, so every price basis stayed on the menu and the alternate guard applied no default reading" + }, + "removed_stat_vars": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Removed Stat Vars", + "description": "the StatVar dcids the default reading removed; empty when it removed none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "applied" + ], + "title": "TraceDefaultReading", + "description": "The default price-basis reading applied before bind. Price bases rank Nominal,\nRealValue, InflationAdjusted, then PurchasingPowerParity, with any basis the query names\nmoved first. A StatVar leaves the menu when a StatVar of a better-ranked basis with the\nsame constraints holds data wherever it does over the requested years. The trace records\nwhether the step ran and the StatVars it removed." + }, + "TransformationLogEntry": { + "properties": { + "transformation": { + "type": "string", + "title": "Transformation", + "description": "the step title, plain text" + }, + "description": { + "type": "string", + "title": "Description", + "description": "what the step does, as CommonMark" + } + }, + "type": "object", + "required": [ + "transformation", + "description" + ], + "title": "TransformationLogEntry", + "description": "One step of the pipeline's transformations, in pipeline order." + }, + "TransformationStepModel": { + "properties": { + "transformation": { + "type": "string", + "title": "Transformation", + "description": "the step title, plain text" + }, + "description": { + "type": "string", + "title": "Description", + "description": "what the step does, as CommonMark" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "transformation", + "description" + ], + "title": "TransformationStepModel", + "description": "One step the DFO pipeline applied to a source's data, in pipeline order." + }, + "UnavailableFormatModel": { + "properties": { + "format": { + "type": "string", + "title": "Format" + }, + "reason": { + "type": "string", + "title": "Reason" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "format", + "reason" + ], + "title": "UnavailableFormatModel" + }, + "UnitAlternative": { + "properties": { + "currency": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Z]{3}$" + }, + { + "$ref": "#/components/schemas/IdentityCurrencyRole" + } + ], + "title": "Currency", + "description": "the value a caller resubmits as facets.unit.request.currency, as written: an ISO 4217 code for an ambiguous currency name, or a role shape for a role-relative currency phrase beside entities on two roles" + }, + "label": { + "type": "string", + "title": "Label", + "description": "the currency's display name, or the role's reader-facing noun" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "currency", + "label" + ], + "title": "UnitAlternative", + "description": "One currency a unit_not_resolved refusal offers in place of the unit\nphrase it could not resolve -- one entry of NoData.unit_alternatives." + }, + "UnitBlock": { + "properties": { + "unit_class": { + "$ref": "#/components/schemas/UnitKind", + "description": "currency, purchasing_power, percent, or other (`unit_words.unit_class`)" + }, + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Currency", + "description": "its ISO 4217 code when it is a currency" + }, + "currency_noun": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Currency Noun", + "description": "the plural noun a currency reads as, such as `US dollars`" + }, + "price_basis": { + "anyOf": [ + { + "$ref": "#/components/schemas/PriceBasisWords" + }, + { + "type": "null" + } + ], + "description": "the price basis the unit itself states; null when it states none" + }, + "changes_magnitude": { + "type": "boolean", + "title": "Changes Magnitude", + "description": "whether the unit changes what a number means, so a heading states it" + } + }, + "type": "object", + "required": [ + "unit_class", + "currency", + "currency_noun", + "price_basis", + "changes_magnitude" + ], + "title": "GraphUnitBlock", + "description": "A unit's detail block: the words `unit_words` names it by." + }, + "UnitConstantPricesRequestBinding": { + "properties": { + "currency": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Z]{3}$" + }, + { + "$ref": "#/components/schemas/UnitCurrencyRole" + } + ], + "title": "Currency" + }, + "prices": { + "type": "string", + "const": "constant", + "title": "Prices", + "default": "constant" + }, + "base_year": { + "type": "integer", + "title": "Base Year" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "currency", + "base_year" + ], + "title": "UnitConstantPricesRequestBinding", + "description": "The unit axis's own conversion-request form for `prices: \"constant\"`:\n`base_year` is a required member." + }, + "UnitConversion": { + "properties": { + "currencies": { + "items": { + "$ref": "#/components/schemas/ConversionCurrency" + }, + "type": "array", + "title": "Currencies", + "description": "each currency a unit request accepts that converts at least one served year at current prices, at a constant-price base year, or both, sorted by code" + }, + "default_base_year": { + "type": "integer", + "title": "Default Base Year", + "description": "the base year a constant-price request that names none completes to: the deflatorBaseYear every conversion table declares" + }, + "role_currencies": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "observationAbout", + "origin", + "destination" + ] + }, + "type": "object", + "title": "Role Currencies", + "description": "the ISO 4217 code of the national currency (the graph's nationalCurrencyOf arc) of the one entity bound on each role, among `currencies`. A role bound to several entities, or to one no single currency names, is absent. A request may name the role ({'role': 'origin'}) or the code" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "currencies", + "default_base_year" + ], + "title": "UnitConversion", + "description": "The conversions a unit request can ask of this answer: the currencies, years and base\nyears the conversion recipe of its served members converts. A request posts one as the\nidentity's `facets.unit` (`IdentityFacetValueRequest`)." + }, + "UnitCount": { + "properties": { + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" + }, + "places": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Places", + "description": "the places its facets cover; null for a role-bearing variable" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "places" + ], + "title": "GraphAvailabilityUnit", + "description": "One unit of a series. `ref` is `null` for facets that state no unit." + }, + "UnitCurrencyRole": { + "properties": { + "role": { + "type": "string", + "enum": [ + "origin", + "destination", + "observationAbout" + ], + "title": "Role" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "role" + ], + "title": "UnitCurrencyRole", + "description": "A unit-request `currency` naming a spec role rather than a concrete\nISO 4217 code: convert to the currency of whichever entity is bound in\nthat role. The role must be one the resolved StatVar declares." + }, + "UnitCurrentPricesRequestBinding": { + "properties": { + "currency": { + "anyOf": [ + { + "type": "string", + "pattern": "^[A-Z]{3}$" + }, + { + "$ref": "#/components/schemas/UnitCurrencyRole" + } + ], + "title": "Currency" + }, + "prices": { + "type": "string", + "const": "current", + "title": "Prices", + "default": "current" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "currency" + ], + "title": "UnitCurrentPricesRequestBinding", + "description": "The unit axis's own conversion-request form for `prices: \"current\"`:\nno `base_year` member." + }, + "UnitKind": { + "type": "string", + "enum": [ + "currency", + "purchasing_power", + "percent", + "other", + "none" + ] + }, + "UnitNode": { + "properties": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "the node's name; for a Provenance, its parent Dataset's name where it has one. Null, and named in gaps, when the graph gives none" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "the node's prose in the graph; null when it has none" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] + }, + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" + }, + "gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Gaps", + "description": "the member path of every value this door cannot know" + }, + "built_from": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] + }, + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" + }, + "kind": { + "type": "string", + "const": "unit", + "title": "Kind", + "default": "unit" + }, + "unit": { + "$ref": "#/components/schemas/UnitBlock" + } + }, + "type": "object", + "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "unit" + ], + "title": "UnitNode" + }, + "UnitsFold": { + "properties": { + "count": { + "type": "integer", + "title": "Count" + }, + "leading": { + "items": { + "$ref": "#/components/schemas/UnitCount" + }, + "type": "array", + "title": "Leading" + }, + "more": { + "type": "integer", + "title": "More" + }, + "national_currency": { + "anyOf": [ + { + "$ref": "#/components/schemas/NationalCurrency" + }, + { + "type": "null" + } + ], + "description": "the units that are their places' national currency; null when none is" + } + }, + "type": "object", + "required": [ + "count", + "leading", + "more", + "national_currency" + ], + "title": "GraphAvailabilityUnits", + "description": "A series' units: how many, the two covering the most places, and how many more." + }, + "Unsupported": { + "properties": { + "code": { + "type": "string", + "title": "Code", + "description": "the reason, a code from the platform registry" + }, + "pointer": { + "type": "string", + "title": "Pointer", + "description": "a JSON Pointer into `definition` (not the request body) naming the binding at fault -- a text-door request has no structured body to point into" + }, + "detail": { + "type": "string", + "title": "Detail", + "description": "human-readable explanation" + }, + "cause": { + "anyOf": [ + { + "$ref": "#/components/schemas/Cause" + }, + { + "type": "null" + } + ], + "description": "why this refusal fired, present only for code=recipe_not_declared (the structured door's same-named ProblemDetails extension); omitted on every other code" + }, + "definition": { + "additionalProperties": true, + "type": "object", + "title": "Definition", + "description": "the canonical definition as interpreted -- {schema_version, identity: {identity_version, shape, slots, entities, facets, requested_window}} -- without spec_id, since this was never a resolvable construction" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "pointer", + "detail", + "definition" + ], + "title": "Unsupported", + "description": "The request was valid and fully understood, but not supported.\n\nFires for a text-door condition the request grammar or this deployment\ncannot honour: the unit binder recognises but cannot represent a unit\nphrase at all -- PPP terms, per-capita, a percent/share unit, or a scale\nword (million/billion/thousand) -- code unit_request_unsupported, or a\nrecognised facet axis this deployment cannot bind (code\nfacet_binding_unsupported). A unit phrase the request form COULD\nrepresent, but that this text failed to parse cleanly (two conflicting\ncurrencies, price bases, or base years in one ask; an incomplete \"base\nyear\" cue with no year value), is a different outcome entirely: it lands\nno_data with reason unit_not_resolved, never here. Distinct from every\nrefusal: the request was never malformed or unresolvable, so this is a\n200, not a problem-details body." + }, + "UnsupportedPart": { + "properties": { + "variable_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Variable Text", + "description": "the variable text this part answers, in the order asked. This part's position in Resolution.parts equals the same variable_index every SSE event keyed by variable_index uses (ShapeEvent, StepEvent, SentenceEvent). Every dataset_resubmit entry kind (identity, candidates, placeholder, and parsed through its nested ParsedPart) requires its own posted variable_text, so this field is always the posted text echoed back onto the rebuilt part, never null. Null only when the whole posted query was empty or whitespace-only (raw_text door), which refuses variable_not_resolved before extraction runs and so has no text to name." + }, + "separate": { + "type": "boolean", + "title": "Separate", + "description": "true when this part was asked beside the others to be compared with them. A client resubmitting an identity, candidate set, or placeholder posts this flag on that entry to preserve the comparison. Two parts marked separate that resolve to one reading carry the same spec_id and stay two parts. False, the default, is omitted", + "default": false + }, + "warnings": { + "items": { + "$ref": "#/components/schemas/Warning" + }, + "type": "array", + "title": "Warnings", + "description": "this part's own run-health signals. A part folded into an earlier part's spec (see DefinitePart.spec) carries binding_folded alone. The merged spec's own resolved warnings live only on the first part that carries it. An unfolded part carries the warnings raised while resolving this part, plus observations_omitted on a candidates part when response_options.include_observations was set." + }, + "timing_ms": { + "anyOf": [ + { + "$ref": "#/components/schemas/Timing" + }, + { + "type": "null" + } + ], + "description": "this part's own latency breakdown, where by_step names only the phases this part ran and total sums them, leaving out the shape_* stages nested inside shape. Excludes the shared, once-per-request steps (e.g. extract), which diagnostics.timing_ms.by_step carries once for the whole request; distinct too from diagnostics.timing_ms.total, the whole request's wall-clock elapsed time." + }, + "rendered_sentence": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Rendered Sentence", + "description": "a human-readable string. For candidates, a header naming how many readings there are ('3 readings.'), then each shown candidate's heading and a byline led by the source and span that set it apart; for no_data, a heading in the same claim form naming the entity, measure, and counterpart that were checked. Either ends with the text of this part's departures, in order, and a candidates part's then closes with its assumptions clause. For a definite part this stays null or omitted: the confirmation sentence (heading and byline) lives at spec.resolved.rendered_sentence, and its departures reach the envelope's composed sentence." + }, + "sentence_plan": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sentence Plan", + "description": "the ordered token form of rendered_sentence, present whenever it is. For a definite part this stays null or omitted. spec.resolved.sentence_plan carries the confirmation sentence's own plan instead." + }, + "restatement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ParsedPart" + }, + { + "type": "null" + } + ], + "description": "the ParsedPart that reproduces this part's own resolution inputs -- the same entities, resolved time window, unit text, and source text the engine actually used to resolve this one leg -- so a client holding this part alone can copy it straight into a fresh ParsedInput.parts entry and re-resolve it faithfully, without flattening it into the whole query's variable_text the way variable_text alone would. Canonical, not verbatim: for a raw_text part, time_text is the equivalent phrase this door's own time grammar recognises (e.g. '2015 to 2020'), not the user's original words, since the engine's date extraction keeps only the structured window and discards the phrasing. Null whenever this part has no faithful echo to give. On a dataset_resubmit entry's identity/candidates/placeholder kinds, which post an identity or stub rather than a phrase and have no per-part resolution inputs to echo -- a dataset_resubmit parsed entry, genuinely re-resolved from its own posted ParsedPart, carries a real one like any parsed-door part. Also null when this leg's entity was bound to a directional role axis (origin/destination) and no door-supplied role named that axis, since an echo without the axis would resubmit the request with that entity reversed. Also null when one of this leg's own inputs does not fit ParsedPart's own field caps, since a truncated echo would misrepresent what was actually resolved." + }, + "operations": { + "items": { + "$ref": "#/components/schemas/Operation" + }, + "type": "array", + "title": "Operations", + "description": "the operations the question asks for over this part's data, in query order; the engine echoes them onto the part it resolves. Empty when the question asks for none" + }, + "departures": { + "items": { + "$ref": "#/components/schemas/Departure" + }, + "type": "array", + "title": "Departures", + "description": "every way this part's answer differs from what its request asked, ordered by how much each changes the number: closest_match, measure_not_applied, operation_not_applied, breakdown_not_applied, entity_unavailable, year_unavailable, modelled_values, group_read_as_members, direction_discarded, direction_inferred, scope_limited. [] when the answer is what was asked. A client that renders its own sentence reads them here; each one's text also closes the sentence that carries this part (see Departure.text). A warning on the same part reports run health and stays separate" + }, + "assumptions": { + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array", + "title": "Assumptions", + "description": "every value the engine filled that the request did not ask for, in clause order. Declared defaults come first, in the order of the Spec's trace.slot_filters, then open roles, then the place scope. A declared default is a slot the request left open that its code system's or shape's declared default fixed, named by the bound code's full label. An open role is a flow role no request word asked for, read across every entity on it with data. It is either a role the role scope default filled (resolved.scope on that axis), whatever its member count, served as one series per member where the shape declares the role, or a role the heading states with no entity of its own ('from 164 providers', 'owed to all creditors'), served as the total over its members. A role the identity binds in entities or lists in open_roles, that one of the part's operations runs over ('top 5 donors'), or that the request's words asked every member of ('all donors'), is asked. The place scope is a request that named no place, read across every place with data. Every door fills assumptions. A definite part reads them from its Spec, a candidates part carries the items every list in CandidatesPart.reading_assumptions holds alike, text included, and no_data and unsupported parts carry []. A dataset_resubmit identity entry posts every slot bound, so its part states the items of the entry's assumptions echo that still hold (see ResubmitIdentityEntry.assumptions), and a candidates entry reads each reading with its candidate's echo (see ResubmitCandidate.assumptions). The sentence that carries this part closes with them as one segment='assumption' clause ('Assumed: official development assistance; every provider.'), after its departures. [] when the answer fills nothing" + }, + "status": { + "type": "string", + "const": "unsupported", + "title": "Status", + "description": "valid, understood, not supported" + }, + "unsupported": { + "$ref": "#/components/schemas/Unsupported", + "description": "the reason and definition" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "status", + "unsupported" + ], + "title": "UnsupportedPart", + "description": "This part's variable was valid and understood, but not supported." + }, + "Usage": { + "properties": { + "api_access": { + "anyOf": [ + { + "$ref": "#/components/schemas/UsageEntry" + }, + { + "type": "null" + } + ] + }, + "python": { + "anyOf": [ + { + "$ref": "#/components/schemas/UsageEntry" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "api_access", + "python" + ], + "title": "Usage", + "description": "`api_access`/`python` are `None` for every source -- an absent\nmember, not a stand-in object -- named in `gaps` alongside\nevery other absent member. Built by `graph_api.usage.usage_document`,\nnever constructed inline at a call site." + }, + "UsageEntry": { + "properties": { + "documentation_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Documentation Url" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Code" + } + }, + "type": "object", + "required": [ + "documentation_url", + "code" + ], + "title": "UsageEntry", + "description": "The shape a non-null `Usage.api_access`/`.python` entry takes. Both\nof its own members are always `None`, and no dcid produces an entry at\nall -- `graph_api.usage`'s own docstring is the record of why." + }, + "VariableDefinition": { + "properties": { + "population_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the populationType; null when the variable declares none" + }, + "measured_property": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the measuredProperty; null when the variable declares none" + }, + "stat_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the statType; null when the variable declares none or its read failed" + }, + "measure": { + "anyOf": [ + { + "$ref": "#/components/schemas/Measure" + }, + { + "type": "null" + } + ], + "description": "the measure the code index names; null when it names none" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Roles", + "description": "the entity roles the variable's observations carry, from its declared observationProperties, defaulting to observationAbout when it declares none" + }, + "source_indicator_codes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Source Indicator Codes", + "description": "the sourceIndicatorCode arc's values: the codes naming the source series, as the publisher codes it (IMF WEO GDP carries NGDP and NGDPD); empty when it has none" + }, + "constraints": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Constraint" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Constraints", + "description": "each constraint the measure does not state, ordered by property dcid; null when the read of a variable's constraint values failed" + }, + "definitions": { + "items": { + "$ref": "#/components/schemas/DefinitionText" + }, + "type": "array", + "title": "Definitions", + "description": "the graph's prose per part: the variable's own, then the measure's, then each constraint value's, in constraint order; a part with none is left out" + } + }, + "type": "object", + "required": [ + "population_type", + "measured_property", + "stat_type", + "measure", + "roles", + "source_indicator_codes", + "constraints", + "definitions" + ], + "title": "GraphVariableDefinition", + "description": "What a variable measures, part by part.\n\n`constraints` are ordered by property dcid: the code index holds a variable's constraints\nas a mapping with no declared order, and the graph's `constraintProperties` arc has none." + }, + "VariableSide": { + "properties": { + "stat_var": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Stat Var" + }, + "label": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Label" + }, + "at_mint": { + "type": "boolean", + "const": true, + "title": "At Mint" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "stat_var" + ], + "title": "VariableSide", + "description": "One side of a composed unit that counts a variable in place of a unit, such as the\npopulation in a per-capita denominator. `stat_var` is the variable's bare dcid." + }, + "VaryingColumnModel": { + "properties": { + "column": { + "type": "string", + "title": "Column" + }, + "distinct": { + "type": "integer", + "title": "Distinct" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "column", + "distinct" + ], + "title": "VaryingColumnModel" + }, + "VersionHistoryEntry": { + "properties": { + "date": { + "type": "string", + "title": "Date", + "description": "the release date, YYYY-MM-DD" + }, + "title": { + "type": "string", + "title": "Title", + "description": "the release title, plain text" + }, + "changes": { + "items": { + "$ref": "#/components/schemas/ChangeEntry" + }, + "type": "array", + "title": "Changes", + "description": "every change, group by group in order" + } + }, + "type": "object", + "required": [ + "date", + "title", + "changes" + ], + "title": "VersionHistoryEntry", + "description": "One release of the pipeline's changelog, newest first." + }, + "VersionRef": { + "properties": { + "id": { + "type": "string", + "pattern": "^(spec_[0-9a-f]{32}|ops_[0-9a-f]{6,64})$", + "title": "Id" + }, + "content_version": { + "type": "string", + "pattern": "^(cv_[0-9a-f]{32}|ocv_[0-9a-f]{6,64})$", + "title": "Content Version" + }, + "label": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "title": "Label" + }, + "at_mint": { + "type": "boolean", + "const": true, + "title": "At Mint" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "content_version" + ], + "title": "VersionRef", + "description": "A Datasets version: a `spec_` id with its `cv_` content version, or an `ops_` id with\nits `ocv_` content version, and optionally the words for it." + }, + "Warning": { + "properties": { + "code": { + "type": "string", + "title": "Code", + "description": "stable machine code from the platform registry, lower snake_case, e.g. date_coverage_partial, binding_folded" + }, + "severity": { + "type": "string", + "enum": [ + "info", + "warn", + "degraded" + ], + "title": "Severity", + "description": "the severity level" + }, + "message": { + "type": "string", + "title": "Message", + "description": "human-readable explanation of the warning" + }, + "spec_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Spec Id", + "description": "the spec_id this warning attaches to, when it concerns one returned spec specifically; omitted otherwise" + }, + "params": { + "anyOf": [ + { + "additionalProperties": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Params", + "description": "the counts and labels the message states, for a client to compose its own text. observations_series_truncated: {shown, total, order}, the series shown, the confirmed series behind them, and how the shown series were chosen: 'ranked' (the most recent and largest) or 'fixed' (a selection made before values were read, not ranked by value). elected_shape_no_data: {no_data, elected}, the labels of the readings with no data and of the readings answered instead. un_system_unavailable: {places, variables, variable_labels}, the place dcids the UN front door refused, the variables of the UN reads that failed, each empty when none, and each variable's graph name, in variables order, '' where the graph holds none; a warning without params says the UN search itself was unavailable. Omitted for every other code" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "severity", + "message" + ], + "title": "Warning", + "description": "A run-health signal. Note: this name shadows the Python builtin Warning.\n\nOnly `observations_series_truncated`, `elected_shape_no_data` and `un_system_unavailable`\nset `params`. A `None` `params` is left out of every dump, so other codes' warnings stay\nexactly `{code, severity, message}` plus `spec_id` where one applies." + }, + "WarningModel": { + "properties": { + "code": { + "type": "string", + "title": "Code" + }, + "severity": { + "type": "string", + "title": "Severity" + }, + "message": { + "type": "string", + "title": "Message" + }, + "contributing_member_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Contributing Member Count", + "description": "stat_vars_summed only: how many StatVars with rows were summed into the collapsed frame's one series" + }, + "stat_var_ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Stat Var Ref", + "description": "stat_vars_summed only: the family ref, `dcid:`, that the collapsed frame's `stat_var` column carries" + }, + "stat_var_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Stat Var Label", + "description": "stat_vars_summed only: the family's label, the string the presentation door gives `stat_var_ref` on a chart (`code_index.labels.family_label` over the spec identity: its measure partition label, then its bound slots' labels); absent when neither has a label" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "code", + "severity", + "message" + ], + "title": "WarningModel", + "description": "One manifest warning. Only `stat_vars_summed` sets the three structured fields. A `None`\nfield is left out of every dump, so other codes' warnings, on the wire and in stored version\nbodies, stay exactly `{code, severity, message}`." + }, + "WindowAll": { + "properties": { + "kind": { + "type": "string", + "const": "all", + "title": "Kind", + "default": "all" + } + }, + "additionalProperties": false, + "type": "object", + "title": "WindowAll" + }, + "WindowLatest": { + "properties": { + "kind": { + "type": "string", + "const": "latest", + "title": "Kind", + "default": "latest" + } + }, + "additionalProperties": false, + "type": "object", + "title": "WindowLatest" + }, + "WindowModel": { + "properties": { + "start": { + "type": "string", + "title": "Start", + "description": "this window's own start period label" + }, + "end": { + "type": "string", + "title": "End", + "description": "this window's own end period label" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "start", + "end" + ], + "title": "WindowModel", + "description": "A period window, its two boundary labels at the frame's grain." + }, + "WindowRange": { + "properties": { + "kind": { + "type": "string", + "const": "range", + "title": "Kind", + "default": "range" + }, + "start_year": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Start Year" + }, + "end_year": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "End Year" + } + }, + "additionalProperties": false, + "type": "object", + "title": "WindowRange" + }, + "WriteReplyResponse": { + "properties": { + "component_id": { + "type": "string", + "title": "Component Id", + "description": "the revised component's own id" + }, + "revision": { + "type": "integer", + "title": "Revision", + "description": "the revision this write minted, or the head left unchanged" + }, + "catalog_version": { + "type": "string", + "title": "Catalog Version", + "description": "the catalogue release this revision minted under" + }, + "composition_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Composition Id", + "description": "the composition this component belongs to, null outside one" + }, + "composition_revision": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Composition Revision", + "description": "the composition's current head revision, null outside one" + }, + "changed": { + "items": { + "$ref": "#/components/schemas/ChangedFieldModel" + }, + "type": "array", + "title": "Changed", + "description": "the patch's own fields, each paired with its prior and new value. This array is empty when the write was a no-op." + }, + "fact_summary": { + "$ref": "#/components/schemas/FactSummaryModel", + "description": "the closed, token-capped fact summary this revision reports" + }, + "resolved_payload": { + "additionalProperties": true, + "type": "object", + "title": "Resolved Payload", + "description": "the revision's stored resolved payload, verbatim: the catalogue envelope {schema_version, catalog_version, component_id, revision, provenance, component}, validated against the catalogue release's envelope schema (dfo-spec-kit envelope.schema.json) when minted. GET /api/presentation/release serves the pinned release's envelope_schema and the component_schemas its component field $refs by $id; every payload this door serves carries that pinned catalog_version." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "component_id", + "revision", + "catalog_version", + "composition_id", + "composition_revision", + "changed", + "fact_summary", + "resolved_payload" + ], + "title": "WriteReplyResponse", + "description": "`PATCH /api/presentation/components/{component_id}`'s 200 body. A\ncreate reply carries this same shape plus `affordance`\n(`CreateReplyResponse` below). A revise reply carries no `affordance`\nkey." + }, + "YearCoverage": { + "properties": { + "year": { + "type": "integer", + "title": "Year" + }, + "series": { + "type": "integer", + "title": "Series" + }, + "role_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object", + "title": "Role Counts" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "year", + "series", + "role_counts" + ], + "title": "YearCoverage", + "description": "What the coverage index counts in one calendar year over the series a frame's\nrequests read: the series holding an observation in it and, under `role_counts`, the\ndistinct members of each role those series carry. A role is keyed by the `label` of its\nentry in the frame's `coverage.dimensions`." + }, + "YearRange": { + "properties": { + "first": { + "type": "integer", + "title": "First" + }, + "last": { + "type": "integer", + "title": "Last" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "first", + "last" + ], + "title": "YearRange" + }, + "datasets_api__capabilities__Capabilities": { + "properties": { + "capability_version": { + "type": "string", + "title": "Capability Version", + "description": "deterministic token identifying this capability set; distinct from schema_version and shared verbatim with problem-details bodies" + }, + "build": { + "type": "string", + "title": "Build", + "description": "the commit sha the image was built from, the same value the x-dfo-commit response header carries" + }, + "schema_versions": { + "items": { + "type": "integer" + }, + "type": "array", + "title": "Schema Versions", + "description": "schema_version values this deployment accepts" + }, + "operation_envelope_active": { + "type": "boolean", + "title": "Operation Envelope Active", + "description": "whether POST mint/definition doors can answer 202 with a pollable operation" + }, + "input_kinds": { + "items": { + "$ref": "#/components/schemas/CapabilityKind" + }, + "type": "array", + "title": "Input Kinds", + "description": "per-kind mint-door liveness" + }, + "formats": { + "items": { + "$ref": "#/components/schemas/CapabilityFormat" + }, + "type": "array", + "title": "Formats", + "description": "per-format rendering liveness" + }, + "bundle_active": { + "type": "boolean", + "title": "Bundle Active", + "description": "whether a mint/definition response can deliver a Frictionless Data Package" + }, + "recipe_classes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Recipe Classes", + "description": "the conversion recipes this deployment can apply, the ConversionRecipe members from materialise.recipe_bodies.RECIPE_CLASSES" + }, + "programmatic_pinning": { + "type": "boolean", + "title": "Programmatic Pinning", + "description": "whether a caller other than the site's own share/publish flow may pin" + }, + "enrichment_fields": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Enrichment Fields", + "description": "enrichment field names this deployment enables. A live token qualifies one as {entity_column}_{field} on the columns option. party_kind is a party's kind (party, total, residual) from the code index's declaration for it. Long output writes {role}_party_kind beside {role}_label for every role on a flow axis without a token; a bare party_kind token requests it for every role on a flow axis the table has. party_kind qualifies no subject role, so observationAbout_party_kind refuses column_unknown. A party the index does not list gets an empty cell and an enrichment_unavailable warning" + }, + "decode_code_systems": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Decode Code Systems", + "description": "code systems the packaged code index declares, sorted. Decoding is always on when a rendered frame's StatVars declare one of these -- there is no opt-out. Long output writes each as a {code_system} column (the StatVar's code in that system) and a {code_system}_label column (its label); pivot output, frame-layout output (layout: \"frame\"), groupby.by and the columns option name it stat_var_{code_system}, the label column" + }, + "default_facet_policies_live": { + "type": "boolean", + "title": "Default Facet Policies Live", + "description": "whether the graph declares its own per-StatVar/per-source default facet policy; false does not mean an unbound axis refuses -- see default_facet_policy" + }, + "default_facet_policy": { + "anyOf": [ + { + "$ref": "#/components/schemas/DeploymentFacetPolicy" + }, + { + "type": "null" + } + ], + "description": "this deployment's own default-facet policy, consulted for an unbound axis once the graph declares none; null if this deployment enforces no fallback of its own" + }, + "summability_declarations_live": { + "type": "boolean", + "title": "Summability Declarations Live", + "description": "whether the graph declares its own per-axis summability; true unconditionally, the same way decode carries no separate liveness gate" + }, + "summable_axes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Summable Axes", + "description": "code systems the packaged code index declares summable, sorted -- the axes a groupby request may name in `by` to keep, with every other declared-summable axis this frame decoded collapsed into it" + }, + "groupby_level_axes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Groupby Level Axes", + "description": "code systems the packaged code index declares summable, hierarchical, and disjoint from children (a parent-coded record excludes its children's), sorted. These are the axes groupby.levels accepts, each rolled up to one depth of its parent chain (0 = root codes) before the sum" + }, + "caps": { + "$ref": "#/components/schemas/datasets_api__capabilities__CapabilityCaps", + "description": "published input limits and response caps" + }, + "code_index": { + "$ref": "#/components/schemas/datasets_api__capabilities__CodeIndexStamp", + "description": "provenance for the packaged code index" + } + }, + "type": "object", + "required": [ + "capability_version", + "build", + "schema_versions", + "operation_envelope_active", + "input_kinds", + "formats", + "bundle_active", + "recipe_classes", + "programmatic_pinning", + "enrichment_fields", + "decode_code_systems", + "default_facet_policies_live", + "default_facet_policy", + "summability_declarations_live", + "summable_axes", + "groupby_level_axes", + "caps", + "code_index" + ], + "title": "Capabilities", + "description": "The full `GET /api/datasets/capabilities` document." + }, + "datasets_api__capabilities__CapabilityCaps": { + "properties": { + "definition_candidate_cap": { + "type": "integer", + "title": "Definition Candidate Cap", + "description": "the reverse-arc page a described-arm definition's member walk reads first; a page that fills it without a confirmed root sends the walk to the whole filtered set, up to definition_subject_ceiling" + }, + "definition_subject_ceiling": { + "type": "integer", + "title": "Definition Subject Ceiling", + "description": "ceiling on the whole filtered reverse-arc set a described-arm definition's member walk reads when its first page cannot settle the family; a larger set refuses over_ceiling (candidate_window), and a walk past its read deadline answers timeout (504, retryable)" + }, + "sync_budget_rows": { + "type": "integer", + "title": "Sync Budget Rows", + "description": "sync budget: a mint/definition request whose own coverage estimate (series_coverage.index.CoverageIndex.estimate) stays at or under this many rows, and at or under sync_budget_requests SDMX requests, runs inline" + }, + "sync_budget_requests": { + "type": "integer", + "title": "Sync Budget Requests", + "description": "the SDMX request half of the sync budget -- see sync_budget_rows" + }, + "async_max_rows": { + "type": "integer", + "title": "Async Max Rows", + "description": "async ceiling: an over-sync-budget mint/definition request whose own coverage estimate (series_coverage.index.CoverageIndex.estimate) stays at or under this many rows, and at or under async_max_requests SDMX requests, is recorded as an operation and answered 202; over either, it is refused over_ceiling (ceiling_kind operation_rows) before any operation is recorded" + }, + "async_max_requests": { + "type": "integer", + "title": "Async Max Requests", + "description": "the SDMX request half of the async ceiling -- see async_max_rows; crossing this one alone refuses over_ceiling with ceiling_kind operation_requests" + }, + "pivot_max_output_cells": { + "type": "integer", + "title": "Pivot Max Output Cells", + "description": "cap on a pivot's total output cell count (rows x columns) before pivot_over_cell_cap" + }, + "operation_retention_days": { + "type": "integer", + "title": "Operation Retention Days", + "description": "how long a terminal (done/failed) operation stays guaranteed pollable (contract, 'The operation envelope'). A done operation's own manifest is guaranteed servable for exactly this long, since it is bounded by the same working-tier artifact clock every other mint/definition response is (dataset_store.snapshot.WORKING_TIER_RETENTION) -- pinning it extends that the same way pinning any other snapshot does. A daily maintenance job deletes done and failed operations last updated more than this many days ago, so a poll after that answers operation_not_found" + } + }, + "type": "object", + "required": [ + "definition_candidate_cap", + "definition_subject_ceiling", + "sync_budget_rows", + "sync_budget_requests", + "async_max_rows", + "async_max_requests", + "pivot_max_output_cells", + "operation_retention_days" + ], + "title": "CapabilityCaps", + "description": "Published input limits and response caps, one field per enforced\nconstant." + }, + "datasets_api__capabilities__CodeIndexStamp": { + "properties": { + "content_hash": { + "type": "string", + "title": "Content Hash", + "description": "digest over the exported rows; equal across two exports of the same graph state" + }, + "exported_at": { + "type": "string", + "title": "Exported At", + "description": "when the packaged index was exported from the graph" + }, + "code_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object", + "title": "Code Counts", + "description": "code count per code system this index carries -- keyed by whatever code systems the index declares, not a fixed set of named fields" + } + }, + "type": "object", + "required": [ + "content_hash", + "exported_at", + "code_counts" + ], + "title": "CodeIndexStamp", + "description": "Provenance for the packaged code index this deployment reads: which export, and how many codes it carries per code\nsystem. Published so a caller can compare `content_hash` across two\nresponses (two mints, say) and tell whether they\nresolved against the same index." + }, + "graph_api__capabilities__Capabilities": { + "properties": { + "capability_version": { + "type": "string", + "title": "Capability Version", + "description": "deterministic token identifying this capability set; distinct from schema_version and shared verbatim with problem-details bodies" + }, + "build": { + "type": "string", + "title": "Build", + "description": "the commit sha the running image was built from" + }, + "data_builds": { + "$ref": "#/components/schemas/DataBuilds", + "description": "the data builds this process serves; they change without a deploy and leave capability_version unchanged" + }, + "doors": { + "items": { + "$ref": "#/components/schemas/graph_api__capabilities__CapabilityDoor" + }, + "type": "array", + "title": "Doors", + "description": "per-door liveness" + }, + "kinds": { + "items": { + "type": "string", + "enum": [ + "country", + "continent", + "subregion", + "continental_union", + "place_other", + "aggregate", + "organisation", + "group", + "stat_var", + "code_system", + "code", + "unit", + "source", + "dataset", + "provenance", + "other" + ] + }, + "type": "array", + "title": "Kinds", + "description": "the closed kind list resolve and the node route classify entities by" + }, + "resolve_kinds": { + "items": { + "type": "string", + "enum": [ + "country", + "continent", + "subregion", + "continental_union", + "place_other", + "aggregate", + "organisation", + "group", + "stat_var", + "code_system", + "code", + "unit", + "source", + "dataset", + "provenance", + "other" + ] + }, + "type": "array", + "title": "Resolve Kinds", + "description": "the kinds POST /api/graph/resolve accepts in its kinds filter" + }, + "recipe_classes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Recipe Classes", + "description": "live unit-conversion recipe classes; empty, no conversion machinery" + }, + "node_shape_gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Node Shape Gaps", + "description": "member paths the node door names in gaps on every node that carries the member, whatever the node" + }, + "source_document_gaps": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Source Document Gaps", + "description": "member paths the sources door's own documentation document always empties, whatever the source -- materialise.provenance_doc.UNCONDITIONAL_GAPS" + }, + "source_catalogue_curated": { + "type": "boolean", + "title": "Source Catalogue Curated", + "description": "whether GET /api/graph/sources serves the real curated allowlist rather than a sample standing in for one" + }, + "caps": { + "$ref": "#/components/schemas/graph_api__capabilities__CapabilityCaps", + "description": "published input limits" + } + }, + "type": "object", + "required": [ + "capability_version", + "build", + "data_builds", + "doors", + "kinds", + "resolve_kinds", + "recipe_classes", + "node_shape_gaps", + "source_document_gaps", + "source_catalogue_curated", + "caps" + ], + "title": "GraphCapabilities", + "description": "The full `GET /api/graph/capabilities` document." + }, + "graph_api__capabilities__CapabilityCaps": { + "properties": { + "node_pool_size": { + "type": "integer", + "title": "Node Pool Size", + "description": "the bounded DCP-read executor's own worker count, shared by resolve confirmation reads and every node read" + }, + "resolve_timeout_seconds": { + "type": "integer", + "title": "Resolve Timeout Seconds", + "description": "ceiling on how long a client waits for POST /api/graph/resolve before a timeout refusal" + }, + "node_timeout_seconds": { + "type": "integer", + "title": "Node Timeout Seconds", + "description": "ceiling on how long a client waits for GET /api/graph/node/{dcid}, POST /api/graph/nodes, or GET /api/graph/documentation/{dcid} before a timeout refusal; GET /api/graph/node/{dcid}/members bounds its graph reads by it, and a label or profile read it cuts short leaves a gap" + }, + "max_dcid_chars": { + "type": "integer", + "title": "Max Dcid Chars", + "description": "ceiling on the length of the dcid path parameter of GET /api/graph/node/{dcid} and GET /api/graph/documentation/{dcid}, and of each dcid POST /api/graph/nodes takes; a longer value is refused 400 request_invalid" + }, + "max_node_batch_dcids": { + "type": "integer", + "title": "Max Node Batch Dcids", + "description": "the most dcids one POST /api/graph/nodes request names; a longer list is refused 400 request_invalid" + } + }, + "type": "object", + "required": [ + "node_pool_size", + "resolve_timeout_seconds", + "node_timeout_seconds", + "max_dcid_chars", + "max_node_batch_dcids" + ], + "title": "GraphCapabilityCaps", + "description": "Published input limits, one field per enforced constant." + }, + "graph_api__capabilities__CapabilityDoor": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "resolve, node, members, roots, sources, or schema" + }, + "live": { + "type": "boolean", + "title": "Live", + "description": "whether this deployment serves this door" + } + }, + "type": "object", + "required": [ + "name", + "live" + ], + "title": "CapabilityDoor", + "description": "One door's liveness in this deployment." + }, + "graph_api__origin_models__DataCommonsRef": { + "properties": { + "id": { + "type": "string", + "enum": [ + "dfo", + "base", + "un_system" + ], + "title": "Id" + }, + "label": { + "type": "string", + "title": "Label" + } + }, + "type": "object", + "required": [ + "id", + "label" + ], + "title": "GraphDataCommonsRef", + "description": "The Data Commons that serves a fact. `id` is the wire enum; `label` its display name." + }, + "graph_api__resolve_models__ResolveRequest": { + "properties": { + "texts": { + "items": { + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + "type": "array", + "maxItems": 25, + "minItems": 1, + "title": "Texts" + }, + "kinds": { + "items": { + "type": "string", + "enum": [ + "country", + "continent", + "subregion", + "continental_union", + "organisation", + "aggregate", + "place_other", + "group", + "code", + "other" + ] + }, + "type": "array", + "minItems": 1, + "title": "Kinds", + "default": [ + "country", + "continent", + "subregion", + "continental_union", + "organisation", + "aggregate", + "place_other", + "group" + ] + }, + "code_system": { + "anyOf": [ + { + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Code System" + }, + "expand": { + "items": { + "type": "string", + "const": "members" + }, + "type": "array", + "title": "Expand", + "default": [] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "texts" + ], + "title": "GraphResolveRequest", + "description": "`texts`: 1 to 25 strings resolved as one batch. Each is stripped of surrounding\nwhitespace and must then be 1 to 200 characters.\n\n`kinds` admits only candidates of those kinds. It defaults to `DEFAULT_RESOLVE_KINDS`, so a\nrequest that omits it equals one naming those eight. `code` searches the code index's labels\nand synonyms, and `code_system` narrows codes to one system's graph id\n(`CRSPurposeCodeEnum`); naming `code_system` without `code` in `kinds` is refused at\n`/code_system`. `expand: [\"members\"]` inlines a group's or region's members." + }, + "search__engine__capabilities__Capabilities": { + "properties": { + "capability_version": { + "type": "string", + "title": "Capability Version", + "description": "deterministic token identifying this capability set; distinct from schema_version and shared verbatim with problem-details bodies and resolved.trace" + }, + "build": { + "type": "string", + "title": "Build", + "description": "the commit sha the running image was built from, the same value the x-dfo-commit response header carries" + }, + "axes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Axes", + "description": "valid SlotKey.axis values. Contract-frozen (a schema_version-locked enum, search.models.Axis), republished here for convenience so a caller need not parse the full JSON Schema to enumerate them" + }, + "facet_axes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Facet Axes", + "description": "valid facet-axis names (BaseIdentity.facets / ResubmitIdentityPayload.identity.facets keys), distinct from axes above -- search.models.FacetAxis, a separate vocabulary from SlotKey.axis. Schema-locked like axes: this vocabulary changes only with a schema_version bump, so unlike recipe_classes or the caps below, it is NOT one of capability_version's hash inputs -- schema_version already covers it" + }, + "recipe_classes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Recipe Classes", + "description": "the conversion recipe members this deployment applies (resolved.observations.series[].conversion.recipe_id), the sorted keys of materialise.recipe_bodies.RECIPE_BODIES, so the list and the applied recipes cannot drift apart" + }, + "doors": { + "items": { + "$ref": "#/components/schemas/search__engine__capabilities__CapabilityDoor" + }, + "type": "array", + "title": "Doors", + "description": "per-door liveness" + }, + "default_policies": { + "items": { + "$ref": "#/components/schemas/CapabilityDefaultPolicy" + }, + "type": "array", + "title": "Default Policies", + "description": "declared default policies and whether each is live" + }, + "caps": { + "$ref": "#/components/schemas/search__engine__capabilities__CapabilityCaps", + "description": "published caps and input limits" + }, + "code_index": { + "$ref": "#/components/schemas/search__engine__capabilities__CodeIndexStamp", + "description": "provenance for the packaged code index" + } + }, + "type": "object", + "required": [ + "capability_version", + "build", + "axes", + "facet_axes", + "recipe_classes", + "doors", + "default_policies", + "caps", + "code_index" + ], + "title": "SearchCapabilities", + "description": "The full GET /api/search/capabilities document." + }, + "search__engine__capabilities__CapabilityCaps": { + "properties": { + "max_query_chars": { + "type": "integer", + "title": "Max Query Chars", + "description": "raw_text.query character ceiling; over this refuses query_too_long" + }, + "max_candidates": { + "type": "integer", + "title": "Max Candidates", + "description": "server ceiling enforced two ways: a resolved candidate set is clamped to this length, while a dataset_resubmit candidates entry posting more candidates than this refuses request_invalid at /input/entries/{i}/candidates rather than being clamped" + }, + "max_variables": { + "type": "integer", + "title": "Max Variables", + "description": "variables resolved per query before the rest are dropped with variables_clamped" + }, + "obs_preview_points": { + "type": "integer", + "title": "Obs Preview Points", + "description": "latest points per series carried once observation preview mode applies" + }, + "obs_inline_max": { + "type": "integer", + "title": "Obs Inline Max", + "description": "total observation points above which every series switches to preview mode" + }, + "role_bulk_rank_max_rows": { + "type": "integer", + "title": "Role Bulk Rank Max Rows", + "description": "rows a role-bearing bulk preview may read whole and rank, most recent and largest first; above this it shows a fixed selection, and its observations_series_truncated warning says so with params.order" + }, + "max_options": { + "type": "integer", + "title": "Max Options", + "description": "ceiling on the options door's candidate lists before truncation: graph-enumerated observationAbout candidates, and the sdmx-derived provider and recipient candidate lists alike" + }, + "max_parts": { + "type": "integer", + "title": "Max Parts", + "description": "parsed.parts list length ceiling; a request over this refuses request_invalid. Distinct from max_variables: raw_text clamps an over-limit extraction with a variables_clamped warning and keeps resolving, while parsed enforces this as a hard schema cap" + }, + "max_part_entities": { + "type": "integer", + "title": "Max Part Entities", + "description": "parsed part entities list length ceiling; over this refuses request_invalid" + }, + "max_variable_text_chars": { + "type": "integer", + "title": "Max Variable Text Chars", + "description": "parsed part variable_text character ceiling; over this refuses request_invalid" + }, + "max_entity_text_chars": { + "type": "integer", + "title": "Max Entity Text Chars", + "description": "parsed entity text character ceiling; over this refuses request_invalid" + }, + "max_role_text_chars": { + "type": "integer", + "title": "Max Role Text Chars", + "description": "parsed entity role_text character ceiling; over this refuses request_invalid" + }, + "max_time_text_chars": { + "type": "integer", + "title": "Max Time Text Chars", + "description": "parsed part time_text character ceiling; over this refuses request_invalid" + }, + "max_unit_text_chars": { + "type": "integer", + "title": "Max Unit Text Chars", + "description": "parsed part unit_text character ceiling; over this refuses request_invalid" + }, + "max_source_text_chars": { + "type": "integer", + "title": "Max Source Text Chars", + "description": "parsed part source_text character ceiling; over this refuses request_invalid" + }, + "region_max_members": { + "type": "integer", + "title": "Region Max Members", + "description": "ceiling on the alt-shape population region resolution pre-warms observation facets for; over this, the pre-warm is skipped rather than refused" + }, + "scope_min_year": { + "type": "integer", + "title": "Scope Min Year", + "description": "earliest year role-scope discovery will request; an open-started requested window floors here rather than reaching further back" + }, + "scope_max_window_years": { + "type": "integer", + "title": "Scope Max Window Years", + "description": "ceiling on a requested window's year span for a role-bearing read, named or discovered; over this refuses scope_too_broad" + } + }, + "type": "object", + "required": [ + "max_query_chars", + "max_candidates", + "max_variables", + "obs_preview_points", + "obs_inline_max", + "role_bulk_rank_max_rows", + "max_options", + "max_parts", + "max_part_entities", + "max_variable_text_chars", + "max_entity_text_chars", + "max_role_text_chars", + "max_time_text_chars", + "max_unit_text_chars", + "max_source_text_chars", + "region_max_members", + "scope_min_year", + "scope_max_window_years" + ], + "title": "SearchCapabilityCaps", + "description": "Published caps and input limits, one field per enforced constant." + }, + "search__engine__capabilities__CapabilityDoor": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "raw_text, parsed, dataset_resubmit, or options" + }, + "live": { + "type": "boolean", + "title": "Live", + "description": "whether this deployment serves this door" + } + }, + "type": "object", + "required": [ + "name", + "live" + ], + "title": "SearchCapabilityDoor", + "description": "One door's liveness in this deployment." + }, + "search__engine__capabilities__CodeIndexStamp": { + "properties": { + "content_hash": { + "type": "string", + "title": "Content Hash", + "description": "digest over the exported rows; equal across two exports of the same graph state" + }, + "exported_at": { + "type": "string", + "title": "Exported At", + "description": "when the packaged index was exported from the graph" + }, + "code_counts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object", + "title": "Code Counts", + "description": "code count per code system this index carries -- keyed by whatever code systems the index declares, not a fixed set of named fields" + } + }, + "type": "object", + "required": [ + "content_hash", + "exported_at", + "code_counts" + ], + "title": "SearchCodeIndexStamp", + "description": "Provenance for the packaged code index this deployment's constraint\nresolution reads: which export, and how many codes it carries per code\nsystem. Not one of `capability_version`'s hash inputs (see\n`search.engine.config.settings().capability_version`, computed from static\nconfig constants alone) -- published here as its own field so a caller\ncan compare `content_hash` across two responses (e.g. a preview and a\nlater download) and tell whether they resolved against the same index." + }, + "search__models__grammar__DataCommonsRef": { + "properties": { + "id": { + "type": "string", + "enum": [ + "dfo", + "base", + "un_system" + ], + "title": "Id", + "description": "'dfo', 'base' or 'un_system'" + }, + "label": { + "type": "string", + "title": "Label", + "description": "the Data Commons' display name: Development Finance Observatory, Data Commons by Google, or UN System Data Commons" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "label" + ], + "title": "DataCommonsRef", + "description": "The Data Commons a provenance's data comes from." + }, + "search__models__request__ResolveRequest": { + "properties": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract version the caller targets", + "default": 1 + }, + "input": { + "oneOf": [ + { + "$ref": "#/components/schemas/RawTextInput" + }, + { + "$ref": "#/components/schemas/ParsedInput" + }, + { + "$ref": "#/components/schemas/DatasetResubmitInput" + } + ], + "title": "Input", + "description": "tagged union; kind discriminates", + "discriminator": { + "propertyName": "kind", + "mapping": { + "dataset_resubmit": "#/components/schemas/DatasetResubmitInput", + "parsed": "#/components/schemas/ParsedInput", + "raw_text": "#/components/schemas/RawTextInput" + } + } + }, + "response_options": { + "anyOf": [ + { + "$ref": "#/components/schemas/ResolveOptions" + }, + { + "type": "null" + } + ], + "description": "optional resolution options" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "input" + ], + "title": "ResolveRequest", + "description": "The single request type for the Search resolve endpoint." + }, + "ProblemDetails": { + "description": "RFC 9457 problem-details body for every non-2xx response.\n\nStandard base fields (type, title, status, detail) plus the platform\nregistry's stable extensions (code, pointer, alternatives, truncated,\nissues, constraint_id, trace_id, capability_version, retryable). Optional\nmembers (pointer, alternatives, truncated, issues, constraint_id) are\nomitted from the wire body when absent -- callers should serialize with\n``model_dump(mode=\"json\", exclude_none=True)``, which ``to_json`` does.", + "properties": { + "type": { + "description": "a relative URI reference to the code's registry entry", + "title": "Type", + "type": "string" + }, + "title": { + "description": "short, human-readable summary of the problem type", + "title": "Title", + "type": "string" + }, + "status": { + "description": "the HTTP status code", + "title": "Status", + "type": "integer" + }, + "detail": { + "description": "human-readable explanation of this occurrence", + "title": "Detail", + "type": "string" + }, + "code": { + "description": "the stable machine-readable code from the platform registry", + "title": "Code", + "type": "string" + }, + "pointer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a JSON Pointer into the request body naming the field at fault", + "title": "Pointer" + }, + "alternatives": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Alternative" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "values that would satisfy this request, when known", + "title": "Alternatives" + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "present iff alternatives is present; whether the cap cut items", + "title": "Truncated" + }, + "issues": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ProblemIssue" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "one entry per failure, for a refusal code that reports several at once", + "title": "Issues" + }, + "cause": { + "anyOf": [ + { + "$ref": "#/components/schemas/Cause" + }, + { + "type": "null" + } + ], + "default": null, + "description": "why the refusal fired, for the two codes that carry one -- omitted otherwise" + }, + "constraint_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the machine-keyable id of the constraint this refusal violates, when known", + "title": "Constraint Id" + }, + "ceiling_kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "for over_ceiling: which ceiling was crossed -- member_cardinality, candidate_window, rows, or bytes", + "title": "Ceiling Kind" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "for over_ceiling: the observed count, in ceiling_kind's own unit, that crossed cap -- omitted only when the count itself is unmeasured, never when it is merely large. Under candidate_window it is the candidates the read actually returned, at most cap: a read that fills its window returns exactly cap, and one that stops early on a surviving continuation token returns fewer", + "title": "Count" + }, + "cap": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "for over_ceiling: the ceiling, in ceiling_kind's own unit, that count crossed. Under candidate_window it is the candidate window the read was allowed", + "title": "Cap" + }, + "trace_id": { + "description": "this request's trace_id, shared with diagnostics and the SSE done event", + "title": "Trace Id", + "type": "string" + }, + "capability_version": { + "description": "the deployment capability version that produced this response", + "title": "Capability Version", + "type": "string" + }, + "retryable": { + "description": "whether retrying the same request might succeed", + "title": "Retryable", + "type": "boolean" + } + }, + "required": [ + "type", + "title", + "status", + "detail", + "code", + "trace_id", + "capability_version", + "retryable" + ], + "title": "ProblemDetails", + "type": "object" + }, + "Alternative": { + "description": "One value that would satisfy the request in place of what was posted.", + "properties": { + "ref": { + "description": "the alternative's own reference (e.g. a code or id)", + "title": "Ref", + "type": "string" + }, + "label": { + "description": "the alternative's human-readable label", + "title": "Label", + "type": "string" + } + }, + "required": [ + "ref", + "label" + ], + "title": "Alternative", + "type": "object" + }, + "ProblemIssue": { + "description": "One failure among several a single refusal can report at once.\n\nEach issue carries its own pointer, the member or axis it concerns, its\nown alternatives and truncation flag, and the machine code and message of\nthe failure it stands for -- mirroring the same-named top-level\nProblemDetails fields, but scoped to one entry among many.\nFields default to None and are omitted from the wire body when absent\n(the envelope's omit-when-absent rule).", + "properties": { + "pointer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a JSON Pointer into the request body naming the field at fault", + "title": "Pointer" + }, + "member": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the member this issue concerns, when the refusal is member-scoped", + "title": "Member" + }, + "axis": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the axis this issue concerns, when the refusal is axis-scoped", + "title": "Axis" + }, + "alternatives": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Alternative" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "values that would satisfy this issue, when known", + "title": "Alternatives" + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "present iff alternatives is present; whether the cap cut items", + "title": "Truncated" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the stable machine-readable code of the failure this issue stands for", + "title": "Code" + }, + "detail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "human-readable explanation of the failure this issue stands for", + "title": "Detail" + } + }, + "title": "ProblemIssue", + "type": "object" + } + } + }, + "tags": [ + { + "name": "Search", + "description": "Resolve a plain-language data question to dataset definitions and their options." + }, + { + "name": "Datasets", + "description": "Register and mint datasets, poll their operations, and read versions, observations and files." + }, + { + "name": "Graph", + "description": "Resolve names to graph nodes and read nodes, members, sources and documentation." + }, + { + "name": "Presentation", + "description": "Create, revise and render presentation components, and read frames and the release." + }, + { + "name": "Codes", + "description": "Look up a problem code's registry entry." + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/strict-fields.json b/python/client-contract/src/dfo_client_contract/strict-fields.json new file mode 100644 index 0000000..ac5d929 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/strict-fields.json @@ -0,0 +1,145 @@ +{ + "format_version": 1, + "required": [ + { + "pointer": "/components/schemas/Resolution/properties/parts" + }, + { + "pointer": "/components/schemas/DefinitePart/properties/status" + }, + { + "pointer": "/components/schemas/DefinitePart/properties/spec" + }, + { + "pointer": "/components/schemas/CandidatesPart/properties/status" + }, + { + "pointer": "/components/schemas/CandidatesPart/properties/candidates" + }, + { + "pointer": "/components/schemas/CandidateSet/properties/specs" + }, + { + "pointer": "/components/schemas/NoDataPart/properties/status" + }, + { + "pointer": "/components/schemas/NoDataPart/properties/no_data" + }, + { + "pointer": "/components/schemas/NoData/properties/reason" + }, + { + "pointer": "/components/schemas/UnsupportedPart/properties/status" + }, + { + "pointer": "/components/schemas/UnsupportedPart/properties/unsupported" + }, + { + "pointer": "/components/schemas/Unsupported/properties/code" + }, + { + "pointer": "/components/schemas/Spec/properties/spec_id" + }, + { + "pointer": "/components/schemas/Spec/properties/definition" + }, + { + "pointer": "/components/schemas/Spec/properties/resolved" + }, + { + "pointer": "/components/schemas/SpecDefinition/properties/spec_id" + }, + { + "pointer": "/components/schemas/SpecDefinition/properties/identity" + }, + { + "pointer": "/components/schemas/Manifest/properties/definition" + }, + { + "pointer": "/components/schemas/Manifest/properties/content_version" + }, + { + "pointer": "/components/schemas/Manifest/properties/artifacts" + }, + { + "pointer": "/components/schemas/DefinitionModel/properties/schema_version" + }, + { + "pointer": "/components/schemas/DefinitionModel/properties/spec_id" + }, + { + "pointer": "/components/schemas/DefinitionModel/properties/identity" + }, + { + "pointer": "/components/schemas/ArtifactEntryModel/properties/artifact_digest" + }, + { + "pointer": "/components/schemas/ArtifactEntryModel/properties/rendering" + }, + { + "pointer": "/components/schemas/ArtifactEntryModel/properties/url" + }, + { + "pointer": "/components/schemas/OperationResource/properties/operation" + }, + { + "pointer": "/components/schemas/OperationEnvelope/properties/operation_id" + }, + { + "pointer": "/components/schemas/OperationEnvelope/properties/status" + } + ], + "enums": [ + { + "pointer": "/components/schemas/Resolution/properties/kind", + "values": [ + "resolution" + ] + }, + { + "pointer": "/components/schemas/CatalogueAnswer/properties/kind", + "values": [ + "catalogue" + ] + }, + { + "pointer": "/components/schemas/DeclinedAnswer/properties/kind", + "values": [ + "declined" + ] + }, + { + "pointer": "/components/schemas/DefinitePart/properties/status", + "values": [ + "definite" + ] + }, + { + "pointer": "/components/schemas/CandidatesPart/properties/status", + "values": [ + "candidates" + ] + }, + { + "pointer": "/components/schemas/NoDataPart/properties/status", + "values": [ + "no_data" + ] + }, + { + "pointer": "/components/schemas/UnsupportedPart/properties/status", + "values": [ + "unsupported" + ] + }, + { + "pointer": "/components/schemas/OperationEnvelope/properties/status", + "values": [ + "pending", + "running", + "done", + "failed" + ] + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/strict-fields.schema.json b/python/client-contract/src/dfo_client_contract/strict-fields.schema.json new file mode 100644 index 0000000..87fa350 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/strict-fields.schema.json @@ -0,0 +1,67 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/strict-fields.schema.json", + "title": "Strict fields", + "description": "The response members the DFO clients act on. Each pointer names one property of one component schema in served/openapi.json. A required entry stays required and non-nullable; an enum entry keeps every listed value.", + "type": "object", + "additionalProperties": false, + "required": [ + "format_version", + "required", + "enums" + ], + "properties": { + "format_version": { + "const": 1 + }, + "required": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "pointer" + ], + "properties": { + "pointer": { + "$ref": "#/$defs/pointer" + } + } + } + }, + "enums": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "pointer", + "values" + ], + "properties": { + "pointer": { + "$ref": "#/$defs/pointer" + }, + "values": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "string", + "minLength": 1 + } + } + } + } + } + }, + "$defs": { + "pointer": { + "description": "An RFC 6901 pointer into served/openapi.json naming one property of one component schema.", + "type": "string", + "pattern": "^/components/schemas/[A-Za-z0-9_.-]+/properties/[A-Za-z0-9_]+$" + } + } +} diff --git a/python/client-contract/src/dfo_client_contract/warning-codes.json b/python/client-contract/src/dfo_client_contract/warning-codes.json new file mode 100644 index 0000000..337e2a7 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/warning-codes.json @@ -0,0 +1,30 @@ +{ + "format_version": 1, + "codes": [ + { + "code": "key_checksum_mismatch", + "class": "DfoWarning", + "condition": "The resolved key's body is empty or its checksum differs, by the key-format rule; the client sends it anyway." + }, + { + "code": "key_not_base62", + "class": "DfoWarning", + "condition": "A character of the resolved key after its prefix is outside base62, by the key-format rule; the client sends it anyway." + }, + { + "code": "key_unknown_prefix", + "class": "DfoWarning", + "condition": "The resolved key starts with neither dfo_k_ nor dfo_p_, by the key-format rule; the client sends it anyway." + }, + { + "code": "route_deprecated", + "class": "DfoDeprecationWarning", + "condition": "An API response carries a Deprecation or Sunset header, once per process per distinct pair of their values." + }, + { + "code": "server_warning", + "class": "DfoWarning", + "condition": "An API response carries an x-dfo-warning header, once per process per message." + } + ] +} diff --git a/python/client-contract/src/dfo_client_contract/warning-codes.schema.json b/python/client-contract/src/dfo_client_contract/warning-codes.schema.json new file mode 100644 index 0000000..4427722 --- /dev/null +++ b/python/client-contract/src/dfo_client_contract/warning-codes.schema.json @@ -0,0 +1,50 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/DevelopmentFinanceObservatory/spec-kit/main/python/client-contract/src/dfo_client_contract/warning-codes.schema.json", + "title": "Warning codes", + "description": "Each code a client sets on a warning it issues itself, with the warning class and the condition, sorted by code. A SearchWarning or DataWarning carries the server's code, so neither is listed.", + "type": "object", + "additionalProperties": false, + "required": [ + "format_version", + "codes" + ], + "properties": { + "format_version": { + "const": 1 + }, + "codes": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "code", + "class", + "condition" + ], + "properties": { + "code": { + "type": "string", + "pattern": "^[a-z][a-z0-9]*(_[a-z0-9]+)*$" + }, + "class": { + "enum": [ + "DfoWarning", + "DfoDeprecationWarning" + ] + }, + "condition": { + "description": "The condition, in one line.", + "type": "string", + "minLength": 1, + "not": { + "pattern": "\\n" + } + } + } + } + } + } +} diff --git a/python/client-contract/tests/__init__.py b/python/client-contract/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/client-contract/tests/test_contract.py b/python/client-contract/tests/test_contract.py new file mode 100644 index 0000000..e3cb21c --- /dev/null +++ b/python/client-contract/tests/test_contract.py @@ -0,0 +1,66 @@ +"""The accessors read the packaged contract, and a missing record set fails +loudly rather than reading as an empty suite.""" + +from __future__ import annotations + +from pathlib import Path + +import pytest + +import dfo_client_contract +from dfo_client_contract import contract + + +def test_every_rule_file_is_listed() -> None: + rules_dir = dfo_client_contract.contract_dir() / "rules" + files = {p.stem for p in rules_dir.glob("*.json")} - {"rules.schema"} + assert files == set(dfo_client_contract.RULES) + + +def test_the_served_document_names_its_commit() -> None: + source = dfo_client_contract.served_source() + assert dfo_client_contract.openapi()["openapi"].startswith("3.") + assert len(source["commit"]) == 40 + + +def test_records_load() -> None: + assert dfo_client_contract.scenarios() + assert dfo_client_contract.ref_examples() + + +@pytest.mark.parametrize("load", [contract.scenarios, contract.ref_examples]) +def test_an_empty_record_set_is_a_hard_failure( + load: object, tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + (tmp_path / "scenarios").mkdir() + (tmp_path / "refs").mkdir() + monkeypatch.setattr(contract, "contract_dir", lambda: tmp_path) + assert callable(load) + with pytest.raises(RuntimeError, match="no records found"): + load() + + +def test_an_unknown_rule_is_refused() -> None: + with pytest.raises(ValueError, match="unknown rule"): + dfo_client_contract.rule("cache") + + +def test_client_codes_are_disjoint_from_the_refusal_codes() -> None: + client = [row["code"] for row in dfo_client_contract.client_codes()["codes"]] + refusals = {row["code"] for row in dfo_client_contract.actions()["codes"]} + assert client == sorted(set(client)) + assert not refusals & set(client) + assert dfo_client_contract.client_codes_schema()["title"] == "Client codes" + + +def test_client_code_tables_are_disjoint() -> None: + tables = { + "client": dfo_client_contract.client_codes(), + "proxy": dfo_client_contract.proxy_codes(), + "warning": dfo_client_contract.warning_codes(), + "actions": dfo_client_contract.actions(), + } + codes = [row["code"] for table in tables.values() for row in table["codes"]] + assert len(codes) == len(set(codes)) + assert dfo_client_contract.proxy_codes_schema()["title"] == "Proxy codes" + assert dfo_client_contract.warning_codes_schema()["title"] == "Warning codes" diff --git a/python/client-contract/tests/test_isolation.py b/python/client-contract/tests/test_isolation.py new file mode 100644 index 0000000..42ceef6 --- /dev/null +++ b/python/client-contract/tests/test_isolation.py @@ -0,0 +1,36 @@ +"""`import dfo_client_contract` loads nothing beyond the standard library. + +Checked against `sys.modules` in a fresh interpreter, so a transitive import +counts, and modules the test process has already imported do not. +""" + +from __future__ import annotations + +import subprocess +import sys + +_SCRIPT = """ +import sys +before = frozenset(sys.modules) +import dfo_client_contract +leaked = sorted( + {name.split(".")[0] for name in sys.modules if name not in before} + - {"dfo_client_contract"} + - set(sys.stdlib_module_names) +) +if leaked: + raise SystemExit("leaked modules: " + ", ".join(leaked)) +print("isolation-ok") +""" + + +def test_import_stays_within_the_standard_library() -> None: + result = subprocess.run( + [sys.executable, "-c", _SCRIPT], + capture_output=True, + text=True, + timeout=30, + check=False, + ) + assert result.returncode == 0, result.stderr + assert "isolation-ok" in result.stdout diff --git a/python/client-contract/tests/test_rules.py b/python/client-contract/tests/test_rules.py new file mode 100644 index 0000000..79e438d --- /dev/null +++ b/python/client-contract/tests/test_rules.py @@ -0,0 +1,215 @@ +"""Replay every rule vector through a reference implementation of its rule. + +The rules are stated in `dfo_client_contract/rules/README.md`; each function +here is the shortest faithful reading of one of them, so a vector that +disagrees with its rule fails here before a client replays it. +""" + +from __future__ import annotations + +import ntpath +import posixpath +import re +import tomllib +import zlib +from typing import Any + +import pytest + +from dfo_client_contract import RULES, rule + +_BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +_KEY_PREFIXES = ("dfo_k_", "dfo_p_") +_TABLE = re.compile(r"\[([A-Za-z0-9_-]+)\]") +_ENTRY = re.compile(r'([A-Za-z0-9_-]+)[ \t]*=[ \t]*"([^"\\\x00-\x1f\x7f]*)"') + + +class RuleError(Exception): + def __init__(self, reason: str, line: int | None = None) -> None: + super().__init__(reason) + self.reason = reason + self.line = line + + +def _vectors(name: str) -> list[dict[str, Any]]: + return rule(name)["vectors"] + + +def _ids(name: str) -> list[str]: + return [vector["name"] for vector in _vectors(name)] + + +def _set(env: dict[str, str], name: str) -> str | None: + return env.get(name) or None + + +def _base62(number: int) -> str: + digits = "" + while number: + number, remainder = divmod(number, 62) + digits = _BASE62[remainder] + digits + return digits.rjust(6, "0") + + +def check_key(key: str) -> str | None: + if not key.startswith(_KEY_PREFIXES): + return "unknown_prefix" + rest = key[len(_KEY_PREFIXES[0]) :] + if any(char not in _BASE62 for char in rest): + return "not_base62" + body, checksum = rest[:-6], rest[-6:] + if not body or _base62(zlib.crc32(body.encode("ascii"))) != checksum: + return "checksum_mismatch" + return None + + +def credentials_path(platform: str, home: str, env: dict[str, str]) -> str: + if explicit := _set(env, "DFO_CREDENTIALS_FILE"): + return explicit + if platform == "windows": + appdata = _set(env, "APPDATA") or ntpath.join(home, "AppData", "Roaming") + return ntpath.join(appdata, "dfo", "credentials.toml") + config = _set(env, "XDG_CONFIG_HOME") or posixpath.join(home, ".config") + return posixpath.join(config, "dfo", "credentials.toml") + + +def parse_credentials(text: str) -> dict[str, dict[str, str]]: + profiles: dict[str, dict[str, str]] = {} + table: dict[str, str] | None = None + for number, raw in enumerate(text.split("\n"), start=1): + line = raw.removesuffix("\r").strip(" \t") + if not line or line.startswith("#"): + continue + if match := _TABLE.fullmatch(line): + if match[1] in profiles: + raise RuleError("duplicate_table", number) + table = profiles[match[1]] = {} + elif match := _ENTRY.fullmatch(line): + if table is None: + raise RuleError("outside_table", number) + if match[1] in table: + raise RuleError("duplicate_key", number) + table[match[1]] = match[2] + else: + raise RuleError("invalid_line", number) + return profiles + + +def look_up_key(vector: dict[str, Any]) -> tuple[str, str | None]: + env = vector["env"] + api_key = vector.get("api_key") + if api_key is False: + return "anonymous", None + if api_key == "": + raise RuleError("key_empty") + if api_key is not None: + return "argument", api_key + if from_env := _set(env, "DFO_API_KEY"): + return "environment", from_env + if vector["file"] is None: + return "anonymous", None + try: + profiles = parse_credentials(vector["file"]) + except RuleError as error: + raise RuleError("credentials_file_invalid") from error + named = _set(env, "DFO_PROFILE") + profile = profiles.get(named or "default") + if profile is None: + if named: + raise RuleError("profile_not_found") + return "anonymous", None + if not profile.get("key"): + raise RuleError("profile_without_key") + return "credentials_file", profile["key"] + + +def cache_root(vector: dict[str, Any]) -> str: + platform, home, env = vector["platform"], vector["home"], vector["env"] + path = ntpath if platform == "windows" else posixpath + chosen = ( + vector.get("cache_dir") + or _set(env, "DFO_CACHE_DIR") + or _set(env, "BBLOCKS_CACHE_DIR") + ) + if chosen: + if chosen == "~" or chosen.startswith(("~/", "~\\")): + chosen = home + chosen[1:] + return path.normpath(chosen) + if platform == "windows": + local = _set(env, "LOCALAPPDATA") or ntpath.join(home, "AppData", "Local") + return ntpath.join(local, "readerkit", "Cache") + if platform == "macos": + return posixpath.join(home, "Library", "Caches", "readerkit") + xdg = (env.get("XDG_CACHE_HOME") or "").strip() or posixpath.join(home, ".cache") + return posixpath.join(xdg, "readerkit") + + +def cache_entry(vector: dict[str, Any]) -> str: + if vector["entry"] == "file": + return "files/sha256/" + vector["digest"].removeprefix("sha256:") + rendering = vector["rendering"] + key = rendering["format"] + if rendering["bundle"]: + key += "-bundle" + if rendering.get("layout") == "frame": + key += "-frame" + return f"manifests/{vector['spec_id']}/{vector['content_version']}/{key}.json" + + +@pytest.mark.parametrize("name", RULES) +def test_every_rule_has_vectors(name: str) -> None: + assert rule(name)["rule"] == name + assert _vectors(name) + + +@pytest.mark.parametrize("vector", _vectors("key-format"), ids=_ids("key-format")) +def test_key_format(vector: dict[str, Any]) -> None: + assert check_key(vector["key"]) == vector.get("reason") + + +@pytest.mark.parametrize( + "vector", _vectors("credentials-path"), ids=_ids("credentials-path") +) +def test_credentials_path(vector: dict[str, Any]) -> None: + path = credentials_path(vector["platform"], vector["home"], vector["env"]) + assert path == vector["path"] + + +@pytest.mark.parametrize( + "vector", _vectors("credentials-file"), ids=_ids("credentials-file") +) +def test_credentials_file(vector: dict[str, Any]) -> None: + if "error" in vector: + with pytest.raises(RuleError) as excinfo: + parse_credentials(vector["text"]) + assert (excinfo.value.reason, excinfo.value.line) == ( + vector["error"]["reason"], + vector["error"]["line"], + ) + return + assert parse_credentials(vector["text"]) == vector["profiles"] + # The format is a subset of TOML: any TOML reader reads the same profiles. + assert tomllib.loads(vector["text"]) == vector["profiles"] + + +@pytest.mark.parametrize("vector", _vectors("key-lookup"), ids=_ids("key-lookup")) +def test_key_lookup(vector: dict[str, Any]) -> None: + if "error" in vector: + with pytest.raises(RuleError) as excinfo: + look_up_key(vector) + assert excinfo.value.reason == vector["error"]["reason"] + return + assert look_up_key(vector) == (vector["source"], vector["key"]) + + +@pytest.mark.parametrize("vector", _vectors("cache-dir"), ids=_ids("cache-dir")) +def test_cache_dir(vector: dict[str, Any]) -> None: + path = ntpath if vector["platform"] == "windows" else posixpath + root = cache_root(vector) + assert root == vector["root"] + assert path.join(root, "v1", "dfo", "cache1") == vector["directory"] + + +@pytest.mark.parametrize("vector", _vectors("cache-layout"), ids=_ids("cache-layout")) +def test_cache_layout(vector: dict[str, Any]) -> None: + assert cache_entry(vector) == vector["path"] diff --git a/python/client-contract/uv.lock b/python/client-contract/uv.lock new file mode 100644 index 0000000..bee0e2a --- /dev/null +++ b/python/client-contract/uv.lock @@ -0,0 +1,567 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "coverage" +version = "7.16.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/55/d1eaf3e73781174340a00dc1ba2aee8a65f82fadb18e2797b192b6b3925b/coverage-7.16.2.tar.gz", hash = "sha256:ca64d9f1f384f151b9511bec01126072acd2f313439f8ed015a22d8790aab6fa", size = 971999, upload-time = "2026-09-27T12:29:01.118Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/2c/f8296c63c5d542f3d21aed685e56b7031a419037d155bb3382fc0940d249/coverage-7.16.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:218d742afca2b5ad5ca759e93eddedfbcc6eadf8322f080dcefc40b7bd4e2d48", size = 223969, upload-time = "2026-09-27T12:26:16.753Z" }, + { url = "https://files.pythonhosted.org/packages/90/23/6f3dcb1423a0d43216e402ea1746e4a7c7c44f38896b97dd573790f56a40/coverage-7.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9a638be322a8d76a41cdb17781c7f82aaee6a66493d8ffb7e2c09ee22423d99", size = 224328, upload-time = "2026-09-27T12:26:18.15Z" }, + { url = "https://files.pythonhosted.org/packages/ac/7d/8f3b6dc920e3fc6732f7678785a2091db439f186afbec30dbf2214d9b1f7/coverage-7.16.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:724bd0f1e81856b35e59fc98cf7b4e544a3cb662e4e0864dca73d4326ee9d808", size = 255832, upload-time = "2026-09-27T12:26:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/d1/36/6c45f15be4eca4ac1062c6a55a323286494c99726a7e58951fe85967ac08/coverage-7.16.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5375ebd99038021b35e99dc88255022912c06565d316212f4a576e4b08d30f5d", size = 258571, upload-time = "2026-09-27T12:26:21.199Z" }, + { url = "https://files.pythonhosted.org/packages/34/fb/b54cbeba3ad89082c2e441278681859e538322cc34b84b2af7ebff00080f/coverage-7.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a076277ca9f5750cc230f0f578ebd2620cec60255b25707361699fef6fb465c", size = 259680, upload-time = "2026-09-27T12:26:22.822Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a2/0dc65ec3d61930e1e4c2e371763b15eb4290896eb343a12d5d3091308116/coverage-7.16.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:58d4a54c6ea672afef66d49be922a2c69826c5ae1a42a9cd94f0c9c2bacdf800", size = 261945, upload-time = "2026-09-27T12:26:24.336Z" }, + { url = "https://files.pythonhosted.org/packages/d6/93/5fad7a61f2c14e08e98946fc31c1c7ffc1195061bf3fdc351db3be77a863/coverage-7.16.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0dcbcfcc059117284c603ff8cb61a65872512882f84a8cf0339241f7f7c2f148", size = 256191, upload-time = "2026-09-27T12:26:25.89Z" }, + { url = "https://files.pythonhosted.org/packages/2d/47/74e5de9227b939ece9f64e729645ddc4296bea10dbfa98721c1333c8be2e/coverage-7.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:afdf43b72ef3876c1fe66423b91466e37877c9e81e8cec70542b7e8525b9d1b7", size = 257610, upload-time = "2026-09-27T12:26:27.35Z" }, + { url = "https://files.pythonhosted.org/packages/13/fe/2cf28d40b43645d1b72388fe3ee7f7c747533a6a9557bb8c24a7ae74fe1a/coverage-7.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9acc7f7ec4a1b5f89bd929fde5b8a714f6fafdc6cc18725413d510aa082b47ad", size = 255757, upload-time = "2026-09-27T12:26:28.949Z" }, + { url = "https://files.pythonhosted.org/packages/d7/3d/7c149fd99fc8bbc39c80db5e688d1d39fd040be2ecb78b8335a51a55b9c0/coverage-7.16.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:80d3f7b48d43ee8fc5e8707a8adb43d743a5a1a85256c25a24f9d6d0e2238fa6", size = 259822, upload-time = "2026-09-27T12:26:30.515Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/b283fce09d5995e227bd8e513358dd7471bedc0f78abc85a925ebdb0a2f6/coverage-7.16.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:126d1af8804d7224421fe991ff65d3ce649081560df7a98b1a5ffff07f9923bd", size = 255325, upload-time = "2026-09-27T12:26:32.037Z" }, + { url = "https://files.pythonhosted.org/packages/bf/91/f3325edf0c4223fb1fe1532b8dbef2a1d2f729459a9a7d1a44d073bae534/coverage-7.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c19cd6d025c1673f22afcd22c7df8a662d779e05d8e3fa6820c22afb895b0206", size = 257191, upload-time = "2026-09-27T12:26:33.525Z" }, + { url = "https://files.pythonhosted.org/packages/c4/89/21eb5e83ecf2eed523c4eb3d65ae513cd082c8fd1b6deb34c4cb6c332f97/coverage-7.16.2-cp312-cp312-win32.whl", hash = "sha256:152877cdc8a07264882cfcd503ba56a3ef6cba56a70e8c70f6eb8ffd7384789a", size = 226034, upload-time = "2026-09-27T12:26:35.021Z" }, + { url = "https://files.pythonhosted.org/packages/db/de/e3ad6d864c0833624b4f1f9b53f9e58e116c945e5e965c3f1e172c5e84cd/coverage-7.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:e6c52d3307824ff93b39efd99e4185d557db40bd841452abfb32e5d9151ca162", size = 226569, upload-time = "2026-09-27T12:26:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c1/bccc58ebe5489cc70628f635c1932fd371f5d7da850dbcf960f95f4c4afc/coverage-7.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:a678c0b6b22086ec2427359d22e37445d4a792f5fdbbc744112c7dade65cad02", size = 226372, upload-time = "2026-09-27T12:26:38.406Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f6/8eb4f220ef24f84fb27d852d4f9bf83e0c73ec1a4a08dd9a87e3f4529739/coverage-7.16.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1a37c6e478cf687e1aa30a593d19c92c02fad9d122b51ab73f51b8dc7a0c0fc9", size = 223993, upload-time = "2026-09-27T12:26:40.164Z" }, + { url = "https://files.pythonhosted.org/packages/40/23/d4bbaf0c154e0b0c2b5264890dbf6ef098dcb50ec8f2469be9490d191660/coverage-7.16.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0993d0e90858c03943d3cb152e068a20dd4707924deec84dd2230261baae3b1b", size = 224368, upload-time = "2026-09-27T12:26:41.762Z" }, + { url = "https://files.pythonhosted.org/packages/7f/48/fc1e88fd571ec5cb38150b7f89f7696ca1bdf9920e01432febb69774cc85/coverage-7.16.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bb2fc905bbf4e6b7f40806ea79e31515abf6349594cdf0adf27c4215f0463204", size = 255358, upload-time = "2026-09-27T12:26:43.442Z" }, + { url = "https://files.pythonhosted.org/packages/1d/56/6785397d07c29c8e70fbb9a07e97d062b43c21ffc5f12385917847f09f63/coverage-7.16.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4358b9c8c0125b460407f3017c6cce8156e904b32772c5630d27112f52bdbfe5", size = 257955, upload-time = "2026-09-27T12:26:45.725Z" }, + { url = "https://files.pythonhosted.org/packages/27/3b/c8cdd07721e5f99abd81cea970d971997f99bf158c0b85f51bd284179c8b/coverage-7.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f15254427c9b33eedac4f198eaf9e356eb4f6214551afb43da6194a2c088ad7", size = 259183, upload-time = "2026-09-27T12:26:47.208Z" }, + { url = "https://files.pythonhosted.org/packages/9b/11/606b192fe43d32574ec6238549d48de588fdcc18485682a5ec0a8ac357f2/coverage-7.16.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9a75a4704ff640e46170042eec1f984385a121227c505d5a16ad8e495f452541", size = 261325, upload-time = "2026-09-27T12:26:49.084Z" }, + { url = "https://files.pythonhosted.org/packages/67/90/eea481f8b0305ceeb33f081a5f47e298391dbd1b589de0c4b3b3aa50d3f2/coverage-7.16.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:14253fc7bb15749b849795a06f5d3b6d8bc3fb8a4b5ddc341faf7a89dce205fc", size = 255531, upload-time = "2026-09-27T12:26:50.509Z" }, + { url = "https://files.pythonhosted.org/packages/6b/be/dedbf9aea1457b120c27ac10b8fc2a357f37fa2b54c3e7286d42980a0a2a/coverage-7.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:921415102a90637fcc2e3f169f61dad7699ecf690e8639fc21b813acbedc0967", size = 257329, upload-time = "2026-09-27T12:26:52.005Z" }, + { url = "https://files.pythonhosted.org/packages/fa/cb/b25c19d5bb2bd0f2e4e27fe8e2ffcae80c7a91ae181c0dc749ed60e9b1a4/coverage-7.16.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cce2bc991293f15cc4084ca116827b5900c5f34e1a54dfe83f10ab5c43162eb7", size = 255294, upload-time = "2026-09-27T12:26:53.634Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a2/892c5c5f4ad44b7b2ca009aee705191f3f268f15052244f2f9e3539b2e35/coverage-7.16.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e1fa594c887365b69745f25a416806e61085dd07b94c9eae68a6e20730629b23", size = 259444, upload-time = "2026-09-27T12:26:55.243Z" }, + { url = "https://files.pythonhosted.org/packages/ed/99/a562537deba0a3e370182ae71c149be796c39d8087365f17a09188f27145/coverage-7.16.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:11e597173af1dc33d5f8a7332ada544199269a223af1ee1770ddd5e245ad0fe8", size = 255111, upload-time = "2026-09-27T12:26:56.851Z" }, + { url = "https://files.pythonhosted.org/packages/2d/20/854ec68641a9b3362ff068a32dfa41637299761617ef253791dbade6fc76/coverage-7.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3e7f99698ba3a7d13988bdd984b7ebf13af4dbe2166dc8502eef90d77603b0a4", size = 256882, upload-time = "2026-09-27T12:26:58.41Z" }, + { url = "https://files.pythonhosted.org/packages/db/0d/748e4518b0ac0f9ff2687c248a6e5f8c0737306e709372632a2556f84443/coverage-7.16.2-cp313-cp313-win32.whl", hash = "sha256:f80bd9f9633eafc73d0a913ba2645c96ba58bba1befc30590f7c0fbfde59d865", size = 226045, upload-time = "2026-09-27T12:26:59.983Z" }, + { url = "https://files.pythonhosted.org/packages/31/fa/6e46edba66a183fe4d99d4bb52c173287e9b8dddabe0888d24cb8210e580/coverage-7.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:8be099e979fc42559328a21828281b4578304191ae46ed4e80a407048a82eee6", size = 226581, upload-time = "2026-09-27T12:27:01.494Z" }, + { url = "https://files.pythonhosted.org/packages/1b/d9/9ef6845367600b336ff75d000444a0d32497d6972c833141bd39356abf68/coverage-7.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:28ff850182a67d117990fa2ce5ea1032836d8c9630dae867e8bdd3bff4533b79", size = 226409, upload-time = "2026-09-27T12:27:03.116Z" }, + { url = "https://files.pythonhosted.org/packages/59/4c/577fc0803dab4155dcf808faffbdd7b159256781c0874a8586e17b81b149/coverage-7.16.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4ee546b9e4872ffa194bf07ac87bfa1202ebb824d0795dc1ef22f175545ca90a", size = 224138, upload-time = "2026-09-27T12:27:05.141Z" }, + { url = "https://files.pythonhosted.org/packages/75/9e/e3785ba3ecba2bd11efc74bfe2801ca4b78c4480b15a375648d809a59da3/coverage-7.16.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a2fac6895eb299a2e52d7bbb8fb3903502b9da8d3f5309ceb16ec40c646b58ee", size = 224445, upload-time = "2026-09-27T12:27:06.805Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d0/963ff22d3fd27117da3b8cc442f5bdc91196f783321e1a8ff0ec43476772/coverage-7.16.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:57ff3783f99d75a1e81dd56a9737eb5665e6736a5d93258ba596b6dcad8fd05b", size = 256112, upload-time = "2026-09-27T12:27:08.43Z" }, + { url = "https://files.pythonhosted.org/packages/a8/d4/a306940c81c6ae759e82fff27d20b7fdc6896e422b821f51313cce212b6c/coverage-7.16.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f37886699cb9abd29958247d718628d5bc6f39e623dff66a09e546c42a7e03", size = 258727, upload-time = "2026-09-27T12:27:09.927Z" }, + { url = "https://files.pythonhosted.org/packages/b9/a3/d3d99d93b02517087aa05bc0cf2d04d372956b849e5443e059079901429b/coverage-7.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0fd7a86fdda7cb6d616d178654bd0ad6bc0f3f33c2e478aa598500a1a9e34eda", size = 259909, upload-time = "2026-09-27T12:27:11.55Z" }, + { url = "https://files.pythonhosted.org/packages/08/44/39dd599181726758dd185ae4dc0c0ab3aeabf7ca70e68e145060feeaaa16/coverage-7.16.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ac0f3b379c94acc2f7dce5f5f0b24d44fa1cc6a509717ef83dfee07450c2117c", size = 262481, upload-time = "2026-09-27T12:27:13.17Z" }, + { url = "https://files.pythonhosted.org/packages/99/e8/91ee43f6ded411460c359d7e1aebde4d6fd8f00a2e5394182d9d212eb23c/coverage-7.16.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7d0732c83746bc24123c581a85d9dd96b70ddb538c9076020aa1a041790361e9", size = 256012, upload-time = "2026-09-27T12:27:14.91Z" }, + { url = "https://files.pythonhosted.org/packages/11/8c/e9499ddc33197bd7eabcb1118ca81756fc874457b324e2b479a4804b2ad2/coverage-7.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b451c68218c150f616bc9649783ec8de76a59792c759b43aa0c9c0466a465e4", size = 257898, upload-time = "2026-09-27T12:27:16.588Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6e/c081cb5991a0afba99f9c4ad6c74a5fce9513a38ddc64e3e6680c6fed9af/coverage-7.16.2-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a56ac4fa5a75c7e182e8f62600cfb4aff43c5ed7356a034f3557659c3bec1d90", size = 255938, upload-time = "2026-09-27T12:27:18.19Z" }, + { url = "https://files.pythonhosted.org/packages/b2/42/1c3d819e8f9b6eb01c2fe90874d67a8882adb9507e0bbb09361ed131ea89/coverage-7.16.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:4cc4f73aa3fabc36e32046d6cd2971405948d8a903636508a3d3b2f9128b3a95", size = 260368, upload-time = "2026-09-27T12:27:19.903Z" }, + { url = "https://files.pythonhosted.org/packages/19/4f/d70eac07901fd587b6ab05e659b52afe13959992aa5113bf6cce059cc572/coverage-7.16.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:723dcdab91357159b722935b500ee8abc0a66c8c432e1e9fabf4cc7598952de8", size = 255620, upload-time = "2026-09-27T12:27:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/34/5e/6d87af88317d3d9a9b18a9ca1bc1673eb516917f296e579d0d4a55cb3490/coverage-7.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5397e21a90dde0e9c6896b77ded8f0be26b66f8b22b33aed41f6043ed95d55e6", size = 257521, upload-time = "2026-09-27T12:27:23.358Z" }, + { url = "https://files.pythonhosted.org/packages/79/bb/90c2641170d2fa1a6757b3f8450ba2740197317b0ddd749e9604b914e886/coverage-7.16.2-cp314-cp314-win32.whl", hash = "sha256:848893e1d361448c113dc2f0913503522a6f7be231d0e38333d2a22d9698a011", size = 226248, upload-time = "2026-09-27T12:27:25.153Z" }, + { url = "https://files.pythonhosted.org/packages/30/08/d8d0478bb02c8eb0ae20a496fc80c40fcf4d3450bd184300d682ba2d28a6/coverage-7.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:5a27b731c171e43dc8b5f32b76a5051dde2ec9b9366c87028f08a7088ebc2c7b", size = 226732, upload-time = "2026-09-27T12:27:26.907Z" }, + { url = "https://files.pythonhosted.org/packages/32/3f/0001da22155b0a8ce063ec0f7e64ecbe17b373f306e7a74435f6d6accb72/coverage-7.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:1c569a9fd25505f1cd6bea90588818f90373ce90e2632e2cacf19ddbd6e14fdb", size = 226645, upload-time = "2026-09-27T12:27:28.588Z" }, + { url = "https://files.pythonhosted.org/packages/d7/85/6d8813aff9b8b8586691a9d33c43c5604f7227622574da7cdc3d91a86861/coverage-7.16.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d93db87adb6b1c1b408dce4763314b55d76a9f589e96783a84ac9e7689e48bdf", size = 224871, upload-time = "2026-09-27T12:27:30.32Z" }, + { url = "https://files.pythonhosted.org/packages/5c/70/444f3a4981ac2cda40fdcf4cc9b56a4e1a33c222abeb33e51ed3e3eb2a6b/coverage-7.16.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:aa62c85046473959c13ba9edca9dc90a77d5c1095b1ba313556314d77fe5b036", size = 225123, upload-time = "2026-09-27T12:27:32.33Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c1/980681cd7b33eb66ac835044116ef0a92e11fcc7bdd866cc89d10b1130b9/coverage-7.16.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:db76506aa5416081f3e8974ae0f7965c58ada0bb0ef7339ac86099588dbb20d3", size = 265049, upload-time = "2026-09-27T12:27:34.085Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e3/87679875c33bb2191f0f05544a1cc9adcc940fe0c35443a10f2df753dde5/coverage-7.16.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a0f2285329dac10ab08f79cb11f5692c497018e6c7c511f95e6fd63a70b8f831", size = 267717, upload-time = "2026-09-27T12:27:36.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/64/5d372776d6eb523d4e93bafba2253f96984e3b18261c4cc56a50863c6d0d/coverage-7.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:382d3346d56b0eec1b793d53a4c88799c8053f516aa3a8d7c44315696954bacf", size = 270047, upload-time = "2026-09-27T12:27:37.96Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/44082ff0cbf9f97d0043f57970a71204097ec7ba606361a9fd2065393669/coverage-7.16.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:648352b94507179d82637292e7ae8802508d95f78e2f00a705a50b6c48011681", size = 271360, upload-time = "2026-09-27T12:27:39.766Z" }, + { url = "https://files.pythonhosted.org/packages/b8/17/9a215efe25b5e0ecc87c89dbe525c4a87d14d87c8c0c7316ef140a5f6f3e/coverage-7.16.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fb2bde05838fffae1a1bf75e5d411a6cac3e4e9bb97e6640fed8cd47888b33f0", size = 264736, upload-time = "2026-09-27T12:27:42.072Z" }, + { url = "https://files.pythonhosted.org/packages/a2/da/7f0a31af8e448107d4d32844bd684757f51ea907bc0c68c8fd537b2123ff/coverage-7.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6a75180829efb8ae62b4aded25be6ddca1c888d138d2d82e21d93bfbd88f41cb", size = 267600, upload-time = "2026-09-27T12:27:43.85Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/3bfecbd3366b775bacdcb3330394d356cf384b5d8f5b2146ac4b14b252b5/coverage-7.16.2-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:99704f73721e23859112072d522076e11c31744fc96b5652e5dd2018aa4359f7", size = 264767, upload-time = "2026-09-27T12:27:45.768Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3f/5d62163732d87e4a0c4710a0eab30f0fd6a2d480112abe2029f014fe8c9d/coverage-7.16.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:29309ccc86b7f33df7db12813c299f215bbbc470ed6292d0bedd63ffae1ebf64", size = 269026, upload-time = "2026-09-27T12:27:47.787Z" }, + { url = "https://files.pythonhosted.org/packages/49/4d/8e4579f225426535085a9be371cc75e3b026d058d679b80affbdfb4c3ef0/coverage-7.16.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:30c1b65d529e46569899fadca59e4a87c1faf2886923f1307ba61e654d4f3c20", size = 264147, upload-time = "2026-09-27T12:27:49.681Z" }, + { url = "https://files.pythonhosted.org/packages/d1/36/ef1f77e2c3f7bb03c2b13b9a2006f88700fdd75535ef158d70049f425c1c/coverage-7.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dcf4bc2aab4e16b1c4c0c2005918f23a7dd5d7821ddae82caed9e3342dc2fcce", size = 266376, upload-time = "2026-09-27T12:27:51.551Z" }, + { url = "https://files.pythonhosted.org/packages/be/79/0cb2bf4428830dec971c718c2c841a039c084415c99e67281f5a72841aab/coverage-7.16.2-cp314-cp314t-win32.whl", hash = "sha256:a9cd3de0a5bfe7b0e21ee10e1a14e3d61bf52efc88217ab1d95d6ace6970bd46", size = 226585, upload-time = "2026-09-27T12:27:53.945Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f9/da17121c16667fd84998e972200ae226a41540f6ea4795776c6d99e8976f/coverage-7.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:611a44e5229a59d7483ce830160e1a0e85f700562c7a5651c7c63fb8f4eb528c", size = 227378, upload-time = "2026-09-27T12:27:55.778Z" }, + { url = "https://files.pythonhosted.org/packages/74/89/01179c62d1b7e6e33bd5001566b02d7f778cf33d3ec1e81e94ca170c517f/coverage-7.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:22957cef43ce038641de78ba995de7568d2d6a37c6ddbf7fa0fd7d1ae2344d91", size = 227064, upload-time = "2026-09-27T12:27:57.496Z" }, + { url = "https://files.pythonhosted.org/packages/4c/57/52935003c3f627ba6e5203d7179aad32448c10899663a30336aba8e81a2c/coverage-7.16.2-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:414c26dfdb96aac2d570a54e03008f001e32eb2d413705365503648c6bd361d8", size = 224140, upload-time = "2026-09-27T12:27:59.343Z" }, + { url = "https://files.pythonhosted.org/packages/31/38/df472520f3e626524d7e2fc9d6da0afe7895a2f1489d36b48af8ca40bb41/coverage-7.16.2-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:00d3eb96e9988c45f50cccd1f1496571ac5c1f91386ac02c4d55516eeda19a24", size = 224449, upload-time = "2026-09-27T12:28:01.299Z" }, + { url = "https://files.pythonhosted.org/packages/0c/aa/3be084d5b82e63ccdad4ed751e4acbae294673573e30481d29f8b7402eec/coverage-7.16.2-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4dbbd1155ca46e6e0b6b89d204428c56ef6a459af21333f365d135a2820e5a09", size = 256060, upload-time = "2026-09-27T12:28:03.185Z" }, + { url = "https://files.pythonhosted.org/packages/de/29/48fca82a7ebf7ff7b2e35019cc9537e7f65e4d2aa1215cc5a8792c989251/coverage-7.16.2-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8fc15cc8d0d06e873c00ef18e1372d605f9aaf3de27d8c24e50782e75bc8b843", size = 259106, upload-time = "2026-09-27T12:28:05.15Z" }, + { url = "https://files.pythonhosted.org/packages/06/3d/b2d5986f2dd53fe201aa1be2e4ab204fa1aed5101e67c0dbbb419b850aee/coverage-7.16.2-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c6afdd69218202bc1758c9a14b86b8cf1084f37ed2ca143e567a103772b16d1", size = 260674, upload-time = "2026-09-27T12:28:06.868Z" }, + { url = "https://files.pythonhosted.org/packages/ce/7e/b50160be3506ead12e6480d14279af7f0f17627694300a2d1fd2c42d2ff5/coverage-7.16.2-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:aba5c63b7afdc749cc9eae943d5b868cba2b261a176378fa1c5a30bc8bc89982", size = 263139, upload-time = "2026-09-27T12:28:08.771Z" }, + { url = "https://files.pythonhosted.org/packages/14/5e/7c805ac9a32606de1399bd7e9bd375aa2f973dc61b12680d9e6403c2e891/coverage-7.16.2-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9174f0af24e5eff248b9dbfe76ec5275a3d19d37edbc2810543f12cf97347a34", size = 256591, upload-time = "2026-09-27T12:28:10.842Z" }, + { url = "https://files.pythonhosted.org/packages/ab/9e/76f1ed129a2daf658a3ea17122824cf2e3b91fea0460d8d3664fc5a61018/coverage-7.16.2-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:80e9fdb4c3d926b6ba721d4bf7435bdb869c3527ae7803290361d0ab73db13b6", size = 258708, upload-time = "2026-09-27T12:28:12.962Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b7/8d62e75f48b527619239a65294f842d4b7fd02a0839d43ae1de80184e2df/coverage-7.16.2-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:7b3bce4a0d05401d70b7d0d5ca783e686bc9d30e81dbd7d980d532609bf809e4", size = 256562, upload-time = "2026-09-27T12:28:14.934Z" }, + { url = "https://files.pythonhosted.org/packages/b8/8d/0a15f95c3afb78e947c52644786ba4bc9de259905687dd720d5e6fae2e76/coverage-7.16.2-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:44f21e407b278efdfc1ee5e481e00518bd1d500310a30a5fbf2bcbedfef4aaf0", size = 261077, upload-time = "2026-09-27T12:28:17.215Z" }, + { url = "https://files.pythonhosted.org/packages/25/00/88389987305a47d732866c07c8a500000ab574df9505e3114ac69c8d027f/coverage-7.16.2-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:59c3926585e1cd1f2190f4b2ac9014de1bbeaf0d5d0587b0dc6b0aa90d17896a", size = 256034, upload-time = "2026-09-27T12:28:19.08Z" }, + { url = "https://files.pythonhosted.org/packages/92/02/34d079d4952ad461bde037d353f9a6e037a7edc45fe0f9ee8781ff73f028/coverage-7.16.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:066429634299e14dd2d511e1e85f8f9cecc500781f6b41907c0dd6f1baea7e63", size = 258034, upload-time = "2026-09-27T12:28:21.242Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d8/3e59a62879285b464ec1b10fd824fbc1af9ce66e842cd39974f80a0becc4/coverage-7.16.2-cp315-cp315-win32.whl", hash = "sha256:893ea9cf86cb8d2546812ac93d973aaf2ee1fb45110a873b014214fd23e3725e", size = 226252, upload-time = "2026-09-27T12:28:23.102Z" }, + { url = "https://files.pythonhosted.org/packages/f4/e1/128026e1b2836e9ad6b219207ba9edf1c5e0088a7869e23088aee7fbbe7a/coverage-7.16.2-cp315-cp315-win_amd64.whl", hash = "sha256:01c6908bc613b420c26c818fe948e1b97dfd041a53c98b01c63bd8321f5c9aae", size = 226728, upload-time = "2026-09-27T12:28:25.21Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f4/c9fa8e7cf525ca7748ac52b0ee89331d13fe09808e45c679830708782e90/coverage-7.16.2-cp315-cp315-win_arm64.whl", hash = "sha256:967d72c835d7a8cf0af99ec813a2d06e3db6df706402f1fe85b31b437645f495", size = 226648, upload-time = "2026-09-27T12:28:27.136Z" }, + { url = "https://files.pythonhosted.org/packages/a2/13/e96b045447a856666f36f9c653e2a80bdaa732aaaf72412b19aa2c26a473/coverage-7.16.2-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:98d9c97f51b334b0adce7b964442a9af33c1a00c6ac856984cc5dc8d18f81c75", size = 224858, upload-time = "2026-09-27T12:28:29.169Z" }, + { url = "https://files.pythonhosted.org/packages/23/90/087f6ad1bd3df059632ca3407a4e6552ed1053ee35354de0a771acf35423/coverage-7.16.2-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:3e861f1071dcc2fec1e88bef0920f6b1eaa66a143555b4f8ab79ba2b0f30ef55", size = 225139, upload-time = "2026-09-27T12:28:31.131Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8e/285dcef0184358044e7cbcd810a1bdc9566bc620f54702d605477155df4a/coverage-7.16.2-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fb9d92ecfe2d5b494367c67f7446f8b75b68d8d0c8cf3bc3e6997478be25d9e2", size = 265090, upload-time = "2026-09-27T12:28:33.04Z" }, + { url = "https://files.pythonhosted.org/packages/06/b2/cc83f3a6e5789a4e89059c69555bc641c2efcde568405a1c06fc702951ab/coverage-7.16.2-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:eb57acff4a74246ae513c142d4b36e18c389c3aed8661914a53f7cd0071031b2", size = 268254, upload-time = "2026-09-27T12:28:35.135Z" }, + { url = "https://files.pythonhosted.org/packages/ac/41/f548c19530f5d66ac6e3c92bbcbc49da7261de3a458b9f3e54a3efb1a0b2/coverage-7.16.2-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:444889f7f66b74e4455c0a97e0e166dd41177f1dca8c0239a47cff25e05ba7e1", size = 270695, upload-time = "2026-09-27T12:28:36.959Z" }, + { url = "https://files.pythonhosted.org/packages/94/61/4dc27cf82ef96434d2874110ad0cc10ea4621025705dc5049862bd3bd181/coverage-7.16.2-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a740ea6f083c6db7b926534d159508f80ba275ab35e722522de0d18d0f56e55f", size = 271853, upload-time = "2026-09-27T12:28:38.821Z" }, + { url = "https://files.pythonhosted.org/packages/38/29/bf8072b1b8bd5f2de8b21460a404460b1a2b97e80a9464c78ec0271f6199/coverage-7.16.2-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8e209591f7c41ae4a9171335cf6156afda0b21de73b02f73f5aa95b2d5fbb08d", size = 265644, upload-time = "2026-09-27T12:28:40.815Z" }, + { url = "https://files.pythonhosted.org/packages/7c/2f/0aecb8721be5cdeb8afd9d6d9f6b463f074e4d8d37f00f4c42442522709f/coverage-7.16.2-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:396bb16e04ce04efbb3df91456ae4e3da918e69ecdf67fb711b0a0fdf35ccce0", size = 268530, upload-time = "2026-09-27T12:28:42.725Z" }, + { url = "https://files.pythonhosted.org/packages/ab/0b/92b4b7628268ee711249958e68fc0328779bd3d9a7ab4715379465aedb84/coverage-7.16.2-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:9cdf19874e0d247f32f03609200370343c3c7aa260b191d8c2bb251d36198283", size = 265154, upload-time = "2026-09-27T12:28:44.684Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/41c95c1ab29b3dcd357cd1227181d1c98185632aca41ce670ce671b23a43/coverage-7.16.2-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:fd3d72233eb8b48acc94fa57d44e2d32ce8e7abed02882ccb6d855ccc4ed33ec", size = 269799, upload-time = "2026-09-27T12:28:46.672Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/ebeb259aa5362b033a137b86d7274ff4b109d59be8cc9913889b783bf75a/coverage-7.16.2-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:bb4ffe96aa663cee727659db5a2afeb38c95f8677b747d447b90d6d4874ea2c5", size = 265196, upload-time = "2026-09-27T12:28:48.996Z" }, + { url = "https://files.pythonhosted.org/packages/b2/18/8437620f90d023680a072eee02f968055f3658bbfb7d386d0ea34cfb7f30/coverage-7.16.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:dba2edfb054f6d4a08df9d1637c39a5aa3865bca6617c13c86be21e45658a59c", size = 267266, upload-time = "2026-09-27T12:28:51.361Z" }, + { url = "https://files.pythonhosted.org/packages/28/6c/f08e8ee4293e6434035424180bef4d45e028e8ecc006c61bf9453e74405e/coverage-7.16.2-cp315-cp315t-win32.whl", hash = "sha256:251aed777c47c77aba047096d4542889db089227655711dfc2b9c54ef0e15e35", size = 226583, upload-time = "2026-09-27T12:28:53.33Z" }, + { url = "https://files.pythonhosted.org/packages/f7/fd/3f939c2847f4a72c20cff8b1ac33da78ea91a2d38d9b43336e60db719103/coverage-7.16.2-cp315-cp315t-win_amd64.whl", hash = "sha256:2aca0bdfa9e91621d5b09d815357bf63def4fc0e9cb66da67bf2cf93f3b1a6f5", size = 227374, upload-time = "2026-09-27T12:28:55.158Z" }, + { url = "https://files.pythonhosted.org/packages/5a/35/b98cdc354c952402132e675a87f2cc3227fb68f959c84aaa491fbe15933d/coverage-7.16.2-cp315-cp315t-win_arm64.whl", hash = "sha256:b88841e654f09732804809e435b3e005a929ffd9998b872b7b213957b8759cb8", size = 227064, upload-time = "2026-09-27T12:28:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0c/7a64e1ac90541a8edf50daef0914848011fb057a5bf55284a4811e21939a/coverage-7.16.2-py3-none-any.whl", hash = "sha256:11d28e9123a9156cb405d8d27b44256c9a58fb5decc2073a8f17862057e3aa0f", size = 215754, upload-time = "2026-09-27T12:28:59.075Z" }, +] + +[[package]] +name = "dfo-spec-kit-client-contract" +version = "0.1.0" +source = { editable = "." } + +[package.dev-dependencies] +dev = [ + { name = "jsonschema" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "referencing" }, + { name = "ruff" }, + { name = "ty" }, +] + +[package.metadata] + +[package.metadata.requires-dev] +dev = [ + { name = "jsonschema", specifier = ">=4.23" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "pytest", specifier = ">=9.1.0" }, + { name = "pytest-cov", specifier = ">=7.1.0" }, + { name = "referencing", specifier = ">=0.36" }, + { name = "ruff", specifier = ">=0.15.0" }, + { name = "ty", specifier = ">=0.0.59" }, +] + +[[package]] +name = "distlib" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/d36966de7304047a1001a7559fbf266c464bb5d8cc85464536ef8c9bcc32/distlib-0.4.4.tar.gz", hash = "sha256:ca4175b4ac7f71223cc30ed7248c45d2b38c2439d8ee6e498ab67ed63cf3508d", size = 621304, upload-time = "2026-10-16T13:56:34.203Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/2b/238f02a4927fa2e27aa995371d240a468b52e42eae44a678434aff736b38/distlib-0.4.4-py2.py3-none-any.whl", hash = "sha256:cf09d55b1e85a89576b036aeb71550bfd68320f3f21761ca329eadadad918638", size = 472099, upload-time = "2026-10-16T13:56:32.053Z" }, +] + +[[package]] +name = "filelock" +version = "4.2.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/28/3893324bcadf8f89b1616637468d766af3f625008c0735bf704fdfa86617/filelock-4.2.4.tar.gz", hash = "sha256:c6d8663535e1650ee430507b4ffbac7b464dd64b7647ea0112a9f406499d163d", size = 652444, upload-time = "2026-10-19T01:57:51.001Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/1b/5e74289a1878e666bb4b65fe5805a04cafcac2aa5f519ef1ead67ef91c56/filelock-4.2.4-py3-none-any.whl", hash = "sha256:301241438c57936ef93f4243a94f2559022268bfcf9b375a9a72eb0f8db8358e", size = 162475, upload-time = "2026-10-19T01:57:49.419Z" }, +] + +[[package]] +name = "identify" +version = "2.6.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/35/d70c0006c7cee65999ea94a6273e60b2094f600a3d8b71b04318253fc643/identify-2.6.20.tar.gz", hash = "sha256:ad729860a923858d26917c2f4fb0a1d83d27a75b1e090c06440c573f048f3285", size = 99681, upload-time = "2026-09-26T20:29:07.187Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/70/fffc9613501877c0a10a1ef73a165e6ded3e53f6e7502227fef56d973933/identify-2.6.20-py2.py3-none-any.whl", hash = "sha256:6a16b69b93187244e0548cbfd25b3e4a6f9a7a2ad784625c3bec2b8d27b81aaa", size = 99506, upload-time = "2026-09-26T20:29:06.054Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/e1/2069291243c926a2ff1cd706c7f3eeb9b62144bf60f77c9fb9ff2fb26bd3/iniconfig-2.3.1.tar.gz", hash = "sha256:67f4b9c50da0dedf52af349e7749a80a9057a5031199791b906c3bb3ae878960", size = 21209, upload-time = "2026-10-06T22:48:38.076Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl", hash = "sha256:9121e2c1fdb355232495be3194c8dfe87ccc2d5dee45947b78e68f499790d7a7", size = 7552, upload-time = "2026-10-06T22:48:36.959Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/105de02c1322cfada6d9710d9146ef8026419d433c9d08359a2d35805811/nodeenv-1.11.0.tar.gz", hash = "sha256:3ce8fe5b71d16e8af7039ca65257354100bc772965d6bc549070649e53b1b146", size = 99301, upload-time = "2026-09-26T11:29:21.367Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/c8/12811c9b48fde162bb72b6f2e78fada9a247a09d7bb5be2050a5d099c77b/nodeenv-1.11.0-py2.py3-none-any.whl", hash = "sha256:edaa16e6c14d7cf395d75d4bbd5a26390f4dc06501a33b4e76282b02cc688a25", size = 34277, upload-time = "2026-09-26T11:29:19.933Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.13.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/e6/d0abbb256b44e6a05748c6942511ff67db8dbb068de0c35b24bf1b395b09/platformdirs-4.13.5.tar.gz", hash = "sha256:05831adf87d392760f4b5c3a0a95579ab5a10b18b9b9bd43680dcb47544788a0", size = 62362, upload-time = "2026-10-19T01:02:11.778Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/8a/1d8cb3842909dc193a73835adedf412e32e18f8ffd59f43983949622fe6f/platformdirs-4.13.5-py3-none-any.whl", hash = "sha256:53d3ec4280b815c1e0b02edad7f9ee8fda1ba9c0865dd9c2e6e63849ce82fc1e", size = 32779, upload-time = "2026-10-19T01:02:10.17Z" }, +] + +[[package]] +name = "pluggy" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/db/7fc19e6f2dc92a966727031389fc2e08b558f0f25eb7403c1119ad4713cd/pluggy-1.7.0.tar.gz", hash = "sha256:d1eaa46ebb595891b860ab086b4d09c8588af65ebd4361b8e8f4bb8920b90ba8", size = 123304, upload-time = "2026-10-15T09:50:58.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/9e/2b38731e0fc536806f16490e1a12d7f0dc2a1235aa8cc07bcc75416a7daa/pluggy-1.7.0-py3-none-any.whl", hash = "sha256:7dd7b0d8832ba3cb632c306926ded123429211b83641b35dc5c41ad2d34f9bec", size = 27082, upload-time = "2026-10-15T09:50:56.808Z" }, +] + +[[package]] +name = "pre-commit" +version = "4.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/c3/6965c2690ddce885ec75121572d065a5b94c5a5d8d3e657927ecda9fd715/pre_commit-4.7.0.tar.gz", hash = "sha256:1f3deee12b914c8fa184bd2b5953391c2e4f36763e403d4a23dc9983fa7c6e86", size = 198120, upload-time = "2026-10-12T20:45:40.32Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/83/ce0a196e4f7b20b11ce3aa1fc72fb973f64b7628d51c1b8aebad37fb7f81/pre_commit-4.7.0-py2.py3-none-any.whl", hash = "sha256:2e229038ad3656081b70c27913157e4b636ef306f643f024a8a8e3f0f7b2f877", size = 226261, upload-time = "2026-10-12T20:45:38.858Z" }, +] + +[[package]] +name = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "pytest-cov" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage" }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, +] + +[[package]] +name = "python-discovery" +version = "1.6.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/ee/cf608372c88ce2c136ee13c69ab6f667dbc0d0c1176af188b4ddc8853e66/python_discovery-1.6.4.tar.gz", hash = "sha256:bc70d31f0ec5de11eda13d4d64c16e24b3506a65984684f2b6c98cb83b2ea9df", size = 89883, upload-time = "2026-10-19T01:45:14.855Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/91/1aa70d3dfcab0dbcf88a2cbc3bce7f7c69562287a90216e617eaa4937e25/python_discovery-1.6.4-py3-none-any.whl", hash = "sha256:530179cc51a1816d512b15635b3dc931295ae12efb183783ad31190a5d425d2b", size = 39385, upload-time = "2026-10-19T01:45:13.668Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/42/68/3bd46b8a5e01d3c2ebdf9c5e9497912e3fe0cde02bac21a7130ca866e403/rpds_py-2026.9.1.tar.gz", hash = "sha256:4793ef7f78268b124b73fa933440f01d258bbae01de9fa53e9080c9ab0425a12", size = 63948, upload-time = "2026-10-04T16:32:36.469Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/34/a828586ea3329fbb50895b50e9cf98ca3d924a9f41a0b26d443bff1b3794/rpds_py-2026.9.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:50906f5aea24b5a865cbd0a589698288631d9f3a54c3a937c83aefa95a0d14af", size = 346822, upload-time = "2026-10-04T16:29:16.258Z" }, + { url = "https://files.pythonhosted.org/packages/90/81/ac6a0d064982251856ce009c9e1dd51a34110b3c055aa7d1aad18b4899a3/rpds_py-2026.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e21c1429e205828ea886a2293a4a2c8e01f4c25d9893ca330e97a6cf73f52e7b", size = 341380, upload-time = "2026-10-04T16:29:17.706Z" }, + { url = "https://files.pythonhosted.org/packages/42/ff/bf7d54f362748fd6a49277b9d6531c394074110fedf50ad791ec59133fbb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693b2728bbcc48d09a981a356954b0c47c53ff25b545856f28a889ea619f69a", size = 373053, upload-time = "2026-10-04T16:29:19.063Z" }, + { url = "https://files.pythonhosted.org/packages/60/de/74b0ccdbbd28687b9b5fdb34c1cabed88352182facaced9d6f5486b8b9ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8601470267d938bcb7f3ab1a336100af51a4fd5b6ed030ef52461bb3ef5e7e07", size = 377742, upload-time = "2026-10-04T16:29:20.543Z" }, + { url = "https://files.pythonhosted.org/packages/c2/6d/b979775a3057b2a5c26d75ecbff60a20a24ef081db6dd76836fca3f20247/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3890a6aa36e6baa53d5258a2a25d3ef8b37ad165a6ab27a892d7c3e3a432cd69", size = 487289, upload-time = "2026-10-04T16:29:21.958Z" }, + { url = "https://files.pythonhosted.org/packages/1d/5d/7c34734ce3ece943d9d6ee0122a74a21bbc75b47acb5b7053c83f6efb1ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b5b393eda5ea42cca1c1a6665f2a4882b4fd5d1777e41ce0545a107fb008c9d", size = 390710, upload-time = "2026-10-04T16:29:23.378Z" }, + { url = "https://files.pythonhosted.org/packages/1d/6d/b26eb1e75395925b3a142ed351cbed2ec8212f5c9d937aee3df32c701baa/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addeda51556dac7c1a2f14cda62db8b621cd12afba3091d03a96c72932387eab", size = 371261, upload-time = "2026-10-04T16:29:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/7c/98/b2fdfe10301a9e27af21e634337fbba7baac0bc17fe44619a17c26bba2cb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d9edf30457d74eebfd76b045535e36f1cd89062566a128a0db2145ca042d787e", size = 376075, upload-time = "2026-10-04T16:29:26.748Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b1/c4b8d954e49c3c69cf8063c0c9e0919c99f3d2cecc46311606a1cbe835dc/rpds_py-2026.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:815d26356930846a40c7bc1366e7b1b0320ab8a063e66c11298a208bed0fd237", size = 399358, upload-time = "2026-10-04T16:29:28.282Z" }, + { url = "https://files.pythonhosted.org/packages/b3/59/9559a7293c97dff0cbb293efffbd36644103883ecc27741af8ef90c84ca8/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b5a6f40f0a1486b4b36c888123afc67acdbd9f33235927acf5ff295429a0ba3", size = 550267, upload-time = "2026-10-04T16:29:29.851Z" }, + { url = "https://files.pythonhosted.org/packages/6c/9d/6dc60e49511de4c8b00e74f9c1d43aed4d27f712cdb1ade92f2c199cbf64/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b5b8b0753718d258fd454283fbd57e14545d3b40583fa672e27cb4f987626bcc", size = 614018, upload-time = "2026-10-04T16:29:31.54Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bc/92a4ecf27301b886232a413360f6b348a81d55ffef654f2ebda5970ebc3d/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:46d80bc76b51a6c24f9944368c28d38b8bcbcea1da4f2f8d3ebc31a67e8c6ec6", size = 578509, upload-time = "2026-10-04T16:29:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/08/53/efb97f2e6589b7ab8394385a73870e0b2ab2a195281c117b21fd6d7d4855/rpds_py-2026.9.1-cp312-cp312-win32.whl", hash = "sha256:befc2d6a953e563f8a7bfd87a42c22ebf8a3e980dcb7b6a4d17b70b0e914e8a3", size = 205401, upload-time = "2026-10-04T16:29:34.451Z" }, + { url = "https://files.pythonhosted.org/packages/1c/84/1700cc748d0eaa747486e4e82882d2575224e6e9a3148df583058850c629/rpds_py-2026.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ce8943f79c2210f7abcc28e86367b03b28d95027fd01c46d2472373ae70c86f", size = 222923, upload-time = "2026-10-04T16:29:35.709Z" }, + { url = "https://files.pythonhosted.org/packages/c3/89/0302215373c2f8b4408b0fdfee955368cc378a98ff59508d47a7e0dc2dbf/rpds_py-2026.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:501909f2e4a1e2dee528ef766fe3c469060ebc17e54a8383d404ba07a81a6f02", size = 218415, upload-time = "2026-10-04T16:29:37.263Z" }, + { url = "https://files.pythonhosted.org/packages/83/ea/ee88fd9e756ff93fb6b1182a47ec09504a242620e33ce1d20679efefe841/rpds_py-2026.9.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a36b70596407634ca82d4b989a3729074a008537a0522e4c8046a67c729103e9", size = 346229, upload-time = "2026-10-04T16:29:38.82Z" }, + { url = "https://files.pythonhosted.org/packages/57/71/a097d6552f837500fc36e6b23d09cfb9890c3cc47531f9ca64e149799615/rpds_py-2026.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eba5d173f7d5708b22a93815017a4611873ed54db9f268077c0dd1ed99cfc858", size = 340514, upload-time = "2026-10-04T16:29:40.405Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b7/497e85768bf4e0d8ddbaa096a4cac31d1509251dee2728a8490aa367e0b5/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:457866b85daf5034296666168b84a69e0b2e89dc4f1af102b46f6448a60b9063", size = 372611, upload-time = "2026-10-04T16:29:41.778Z" }, + { url = "https://files.pythonhosted.org/packages/52/4b/74ab4108916250b6e198e0d3af05bc6835eb046315f22f7a0ceb49667c5a/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3a52a3ba86436ab3aef510fbe21512abc2ddd1993005dfe50514bd2284ef025", size = 377712, upload-time = "2026-10-04T16:29:43.242Z" }, + { url = "https://files.pythonhosted.org/packages/0c/8e/067e77d9d7b3cc793c9d909b7e97e7aadbbb1fb094093b6876902cc96d38/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7841166b7fa64c9c56404617ae4341448847482d45933b13135d26c130519e5", size = 488106, upload-time = "2026-10-04T16:29:44.692Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b4/c5aae6c2dde269bf955f6b7d35065c655a57e47750d9668052ad67e74dda/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:926bdd3e3b5998ddf70cc64bc8cf57209571f9044542913afb673799fec77dd0", size = 390795, upload-time = "2026-10-04T16:29:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/a0/36/76fab39973ee11e7f9f357c55138197bb01c86f6502cb76487e3b4f42db0/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7868b85224291c6cb6759f9b5adb9745f486d226f62b16a614dd5a2a5ab2b35b", size = 370794, upload-time = "2026-10-04T16:29:47.603Z" }, + { url = "https://files.pythonhosted.org/packages/3d/fe/cd2a80e6d7b871937a60e935c5d507aa390d143f4ff3636f640b9733d5df/rpds_py-2026.9.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3cd182d7291d29b92c521a0069d9c01ba6193628a9a105531d11b40a6d731a33", size = 375673, upload-time = "2026-10-04T16:29:49.223Z" }, + { url = "https://files.pythonhosted.org/packages/6c/18/7464a9953724e55a3b3206062fa0ffdeaa519584c6aabf65d3956d94f131/rpds_py-2026.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ea1cda8d8c688278430e4268a42f5e5da3bdd74578dfadc0820c3f1766ce83", size = 398758, upload-time = "2026-10-04T16:29:50.601Z" }, + { url = "https://files.pythonhosted.org/packages/c0/86/1534b436700fd49ff411063b7c4d7e938adfabf90895b6cf1622d5a7d1f6/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5943980471829f6de242a20b109de3111ba6b77e3af0ffc587028ac854b05e6c", size = 550370, upload-time = "2026-10-04T16:29:52.002Z" }, + { url = "https://files.pythonhosted.org/packages/57/1c/e1fa82a8a01e3c5820f3ba98a8b2673f642128eb368fa88871b01dd2c909/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:76d3af9732d2dab69f28179b40ba2d87e2f1d5824b4a694780aa787d685e8f36", size = 613106, upload-time = "2026-10-04T16:29:53.655Z" }, + { url = "https://files.pythonhosted.org/packages/29/55/b20b8c4c3dde8755bfcd5b08492a02d0cd2e26929aedf6199ca2a377d42a/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:78326f4cb4427a56ba4996c0762b63be45f06b85f086526420d2b3a66e40f84d", size = 578235, upload-time = "2026-10-04T16:29:55.157Z" }, + { url = "https://files.pythonhosted.org/packages/55/42/df3f7bbc3f7ab37a8a9db8d6c2ff2c985422899f1f7926afbf7ec3c0b8b4/rpds_py-2026.9.1-cp313-cp313-win32.whl", hash = "sha256:172e47169583f46ce118cbec68e6795d0da0f4606b488b6434f8276bca0a058c", size = 205293, upload-time = "2026-10-04T16:29:56.669Z" }, + { url = "https://files.pythonhosted.org/packages/31/9c/ba5a9569d719bfdd6ce863df4133ac6a1658cf1b07cc3534c31db729fbbc/rpds_py-2026.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:3e93b2cd69a9830be33e03945cd7cda940a0a8bfcfbff41d6144f0cb0d3d8bd9", size = 222409, upload-time = "2026-10-04T16:29:58.049Z" }, + { url = "https://files.pythonhosted.org/packages/35/72/f28ca566f6c23c35bbf7445f65eb0364577b25a026305995e24f78b83d94/rpds_py-2026.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:d151e148117294133bf8af7eeace085e7e87432db15ab6adf640330298a47f6f", size = 217681, upload-time = "2026-10-04T16:29:59.449Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f2/67b94be1532767803415c1c5a1fd88ea487643d74a673cec1ba140af77bb/rpds_py-2026.9.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c9d1aca01f49170fdcf5c92761b1fafe97f554b721ca4570c5949fff778f0d4b", size = 347178, upload-time = "2026-10-04T16:30:00.865Z" }, + { url = "https://files.pythonhosted.org/packages/04/37/b751de2b59b0197a1d92a5dd491de88e8a5e928c2e6562581974f1e85263/rpds_py-2026.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3f0e9ac28fc067d4d34b88ae43c48e9489455c97fee9633d851f7eeed5a05d35", size = 341878, upload-time = "2026-10-04T16:30:02.564Z" }, + { url = "https://files.pythonhosted.org/packages/72/e2/5873bc4643c250db9e05d48dc0c93763d4aa68bc3b81164cb1af3b45b284/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07deecbfce94c78473018bc7d10b337cc651d12df87a1eb2cb3e4024bc9c33d0", size = 373963, upload-time = "2026-10-04T16:30:04.026Z" }, + { url = "https://files.pythonhosted.org/packages/51/03/5acf7632158247f3f6386ff0af3a1ee48167d575037e8d0920594b76d92b/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:821b2755db9194409254012f429c56643416fb96ef9be090be82ec8826b7f477", size = 377975, upload-time = "2026-10-04T16:30:05.555Z" }, + { url = "https://files.pythonhosted.org/packages/e6/00/63fda451b8bffa5808fc8bb311ee7c073b340974b09f273c7b2a145d3d62/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c91c210ae7645626c608400e3519b4a642f837cce09ca830db3beb2e9f274d4", size = 490347, upload-time = "2026-10-04T16:30:07.156Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ae/c093ffd070ba0fb02f76c565d06fecc65ad6e4afdbae78f7031076d3cdac/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54ac2158a6f96cfbabff0b2eedaf94b90c5ec7ca8317fcadc61e1c2b2e0ff6ef", size = 392962, upload-time = "2026-10-04T16:30:08.77Z" }, + { url = "https://files.pythonhosted.org/packages/22/9d/d08a1128ab199b2f0cf25bfeb0639bd05119fff4b7c47bec24ef9a8ec23f/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac2f5dbafd585dfe31f86a23ebf0d3ba480a9d49ebc87947267b5608d4ea0cd", size = 371623, upload-time = "2026-10-04T16:30:10.501Z" }, + { url = "https://files.pythonhosted.org/packages/53/c7/4758ddcbb75609414bbccfcb11d612436f9b3ee821bd2f33f0f1604ee648/rpds_py-2026.9.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:8aa5dda18d39b6143eb24809d158f9252c88f402749b6f1b62a506cc7d96cc35", size = 376997, upload-time = "2026-10-04T16:30:12.124Z" }, + { url = "https://files.pythonhosted.org/packages/87/e4/947bd7f608ff60faf46dc9d389c3dffd0e3d767d78a0be19978448ef0ce7/rpds_py-2026.9.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c90e7fa02e8f5de0d10c17595c568ada48c5302e749462c0ea1a4c362111a86", size = 400169, upload-time = "2026-10-04T16:30:13.804Z" }, + { url = "https://files.pythonhosted.org/packages/4b/35/fe93e020a0543b5670472c18d7e6af3197c08da571240ce1965c84f85c0f/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6d198bad4e49dd6732fbd636e2fc5c082f45c8cad0b4acb756b00c82c76072e", size = 551615, upload-time = "2026-10-04T16:30:15.332Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4f/5d2a0136bb03b2a56a39dc6ff92d58a6e3e53a2e17079238b86228882f16/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:96beca19ec79de272e8668585380ff9092c47077c1d7a1e098e00bbd921f4785", size = 614655, upload-time = "2026-10-04T16:30:16.92Z" }, + { url = "https://files.pythonhosted.org/packages/09/1c/3f1025aaf70d9bf7272cc41f8b64ee76b48bf01726248138430e16f23b38/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5cf77eb04f20b720be95265a3e00eb2a14814074255cc27069c551b2db53118", size = 579602, upload-time = "2026-10-04T16:30:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/53/0d/5c72e6204f76610608706da32b6b7e11ef7e10317558a7bb15a122e008dc/rpds_py-2026.9.1-cp314-cp314-win32.whl", hash = "sha256:a03d57b86d2a51d0a66c92177e2be154ad015f357791d306e714569999cdb4cc", size = 206315, upload-time = "2026-10-04T16:30:20.05Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0b/489d48abbcc7d70cf3fbf662d9d22abf1f4650761c0a9ae05260800800d3/rpds_py-2026.9.1-cp314-cp314-win_amd64.whl", hash = "sha256:837c6b305e26fe0f75b15c92cf3b2ba29e0ae19dc40b1c557b026cb426347d0c", size = 222852, upload-time = "2026-10-04T16:30:21.604Z" }, + { url = "https://files.pythonhosted.org/packages/91/16/bbb05a7e6a10cf79ba639be7f799d770ee15f64175cc61d081b218dd402a/rpds_py-2026.9.1-cp314-cp314-win_arm64.whl", hash = "sha256:fce4b85234a0cbad67bf8e6e1201ee815d172c9aebad75f25645bc4d834f8e31", size = 218709, upload-time = "2026-10-04T16:30:23.036Z" }, + { url = "https://files.pythonhosted.org/packages/22/ac/ac507a0a4ec478ca470440a09583db4be5259ba7670aeba0620822f1e57a/rpds_py-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:3a72c11530d71abfb66c8d7696a2f86c43e63fca8b948f1a784ac490f4ec688e", size = 349596, upload-time = "2026-10-04T16:30:24.558Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f2/817a46b658d5070f477f722c298ee9a24525b0e4017347964146ef5fdd0e/rpds_py-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:068c37bba854ec2fe42f7365c640af11dd9895890ccbf2df5070d0c059bd7f96", size = 343114, upload-time = "2026-10-04T16:30:26.048Z" }, + { url = "https://files.pythonhosted.org/packages/6c/42/6ade976b13ac1b4cb3bf2eb603f1be2fe74df19a29988d4c2b386be59d6f/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fca4eb6df565e2a928f1c7dad92d27db8f9df0f449e76423ed5d7e713ed445", size = 374197, upload-time = "2026-10-04T16:30:27.699Z" }, + { url = "https://files.pythonhosted.org/packages/d9/70/77cdf1d3f1a07faabe936016ae623aec7981f73108a8fe7a203ed2e21998/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c933c6678c6f116ff8af47a4c6db0868b8ace74af0343016c0ef00f00272ea69", size = 378025, upload-time = "2026-10-04T16:30:29.451Z" }, + { url = "https://files.pythonhosted.org/packages/3f/6b/18a44a3beaa9b7931acb04af7bd9539836477c630a794452d4826d6185d4/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028ad274ea951dac64491b5d1e65712a4aeabfdbdb9fccf797b57bd899b0c495", size = 491969, upload-time = "2026-10-04T16:30:30.995Z" }, + { url = "https://files.pythonhosted.org/packages/73/27/fb39cfd6bddaf741b024f813890374578ff8ac1f1adc473659c048b03b05/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d0a99cf9de0b17a3943388e9294a59becf75e7c43421f387bd3c7a9901f7c", size = 393905, upload-time = "2026-10-04T16:30:32.628Z" }, + { url = "https://files.pythonhosted.org/packages/ed/71/0fa7bb77b57af0d710273964180d11b503f62b8a5c358eb2d8c3f62feff6/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0da298fb372dc192610a4b9ecbc68a0cd8b675bbbd1fc519d01b41cfd658333e", size = 374569, upload-time = "2026-10-04T16:30:34.257Z" }, + { url = "https://files.pythonhosted.org/packages/54/22/f41cfac269af3b449513ef1bc3d7f32fde52abbbd2d01c7e76b47743acd9/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:eb61be926bb81567c1f48bdc8aa22b9855048dc2efd53871f9f7e6e9a5632346", size = 377482, upload-time = "2026-10-04T16:30:35.997Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fc/312b49006e7f8f9ca5f96647577b8aa6f3df30519c46bd448f5c425af0b2/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:42e75466f83cd43f6026c81eab74246efb2bdadafb307b85700632d06c68f299", size = 400040, upload-time = "2026-10-04T16:30:37.76Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a6/18cca7a878dc7fa95165a83343fd4d7b65643fd22e54e47340a451121d5c/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:617f59cde379b4f648a09797b7f683d04b90a46344cddab85639da5aff0f5531", size = 551849, upload-time = "2026-10-04T16:30:39.443Z" }, + { url = "https://files.pythonhosted.org/packages/e4/6d/1f5685e20f39604691bdc3c05aaa6b8bd2f954e9e996477adf2376768e33/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3edae8c5ddfdb6985d49ae9d150516e5076888879022f91a26c2de9276ce0bdb", size = 614842, upload-time = "2026-10-04T16:30:41.231Z" }, + { url = "https://files.pythonhosted.org/packages/c6/25/98652109fd9f7e10268dd4571aa52b81987001b806f37ef1a18260de714a/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0f045bb053c9057720d72c56dffe30dffdc05997b2897a827b9325f0ab6623fa", size = 582606, upload-time = "2026-10-04T16:30:43.345Z" }, + { url = "https://files.pythonhosted.org/packages/19/03/11ca09099bab5f53373a80a334c424ec917c13d050760a59499d2af5171e/rpds_py-2026.9.1-cp314-cp314t-win32.whl", hash = "sha256:bf35d0568abda97233239ce32896d3ad53fccc537832c104e30c94aa5fb93569", size = 203341, upload-time = "2026-10-04T16:30:44.954Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8a/88909e3ffd9f47f5b58211473875d8c3c09079f0058c46fb72c55a702a26/rpds_py-2026.9.1-cp314-cp314t-win_amd64.whl", hash = "sha256:1e8d4d79d828299bf44a55db22a9388ab967b49d17132c88eab0f4360b48da8e", size = 222843, upload-time = "2026-10-04T16:30:46.486Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b7/a662f367d4896dd0a10cef2fc91f10b7f08af1c10858e287e019563f338d/rpds_py-2026.9.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:1d77b649e6f7cdf12ca5c2a98dad0ad37f9ea9b6f960408a92f0cb12bb3d04d9", size = 347463, upload-time = "2026-10-04T16:30:48.203Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3f/ad45d03df4f84ebae5439577ee81f3999d182711e82235c8037b6528890e/rpds_py-2026.9.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:00ba2d8c7dd4ee537978ddf4b3fbd712bef2d8751603f7f3146b3f4287768e25", size = 342051, upload-time = "2026-10-04T16:30:49.872Z" }, + { url = "https://files.pythonhosted.org/packages/7e/31/3dcd68c13d4bcc59c1f7eb33ac8e80698f06f3eb0d8a1e06419836071c20/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec450527cbf485e13c8d3602a54f428ab0432fdade0ede75efd74b735421c871", size = 374143, upload-time = "2026-10-04T16:30:51.508Z" }, + { url = "https://files.pythonhosted.org/packages/cf/0d/68c1f058a250fbd1380ebda9fc227cbf50117adf8ffe8161ef383ea79f68/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:306ee1850d8105b5baf977e78d45fcadd12c1a54678d614c9baf217708446e91", size = 378604, upload-time = "2026-10-04T16:30:53.206Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d6/2d4c59b85397cb4800594fadf692688ccf5ce556adc930e7a5bf21061a5e/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef6b65b03247c54692ad4fd9ee97cb772781927db72e3cb05e70b3db6d1ff14f", size = 490790, upload-time = "2026-10-04T16:30:54.925Z" }, + { url = "https://files.pythonhosted.org/packages/da/04/7e05dc3aebaf52f4e026766bd668fdd09a9d0e23f64a14686b36b3501892/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a575404ebc9cf2e91edd32eaf570ec1430eb900d4f56724ba7dd4bc1fc9c176d", size = 393146, upload-time = "2026-10-04T16:30:56.625Z" }, + { url = "https://files.pythonhosted.org/packages/57/ca/e2e9a0a46a74ed51a0498ba1fe10f4ea6b2d9a155f372a2f91e51f18cf10/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c16ab111bc27c646ba8aa005d0527754edc538ebb636f0b1bf8e244b48d1945", size = 372022, upload-time = "2026-10-04T16:30:58.295Z" }, + { url = "https://files.pythonhosted.org/packages/ba/cb/8f8774df5134e23424372838bcc5c7ed4127d723e1ff52f7bebd4dcb2563/rpds_py-2026.9.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:7664419f27db41d4f1c43a78dccda7dd6e8ef2428df3ee01d0c2a07a6b071297", size = 377092, upload-time = "2026-10-04T16:30:59.984Z" }, + { url = "https://files.pythonhosted.org/packages/90/02/8d7095d73bf9114219be40230baa5df00611e0a82ed9517779ff9c19f82b/rpds_py-2026.9.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b26b03d9d2658ee2fa234f8f4f19f38a09773fe5261028025032e26d4d35af0", size = 400830, upload-time = "2026-10-04T16:31:01.721Z" }, + { url = "https://files.pythonhosted.org/packages/ec/02/8206856f8f363cd042a8315dc86b3912f5dcb6d3c66bbb24b69c2bfb0775/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:be3e47e2d91aa3942ff9bf4077a505226005abfc39b6f7554a91c1b9393986b9", size = 551478, upload-time = "2026-10-04T16:31:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/41/6b/36211f1bb1f0b0313f496d92f5905b74ea107f27cb16fa3355a82f04575e/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:6307a0da524939decb8ca4a3933b8ab62525794411d6984fca6726e732804af6", size = 615173, upload-time = "2026-10-04T16:31:05.281Z" }, + { url = "https://files.pythonhosted.org/packages/35/77/cda0c4a6f055446b692f0ed5692f73707cafd3dff82672ede31b1a9b59de/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:159a7aab5c5e8b112c8830f54717ce56da1252ebdbb526f5be2df2309280b9e7", size = 579653, upload-time = "2026-10-04T16:31:07.065Z" }, + { url = "https://files.pythonhosted.org/packages/74/ec/d8385f446240aed643b9e92a5055cff3015cc04a13c61f73b2883c478ed5/rpds_py-2026.9.1-cp315-cp315-win32.whl", hash = "sha256:dbc2673f9223d420c91145599b3ba45a8a50c207d1976908e5fb5ddb0c9b9429", size = 206498, upload-time = "2026-10-04T16:31:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a5/71b5cd00e0521e3b6b81828baea368c62b6b700ebdd9554cd7d41ddf12fa/rpds_py-2026.9.1-cp315-cp315-win_amd64.whl", hash = "sha256:75c38c50ab9aca840225d9a9a3810bf11d04bd5c1f186cabbb8aee56db3e9b15", size = 223121, upload-time = "2026-10-04T16:31:10.84Z" }, + { url = "https://files.pythonhosted.org/packages/33/58/dba857c3bc8221b31b62eb170a3080f4f191de79f047200389b7ed1b06a7/rpds_py-2026.9.1-cp315-cp315-win_arm64.whl", hash = "sha256:a431156bb41865fc14cd5d79bb9d7bbed83110b0159e34e62ae30951f96c0009", size = 218741, upload-time = "2026-10-04T16:31:12.592Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d0/320ab28ccc1415eeb509d68682b0014fb74690cd49f1c2d29a232475af50/rpds_py-2026.9.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ef0d8c843e2827d6c120ab4687e9423fb1d893db1df27b7c1506615bcb9734a0", size = 349719, upload-time = "2026-10-04T16:31:14.48Z" }, + { url = "https://files.pythonhosted.org/packages/56/88/f5b12f1358f443c08b7ce3cc8391d82d335f4872580e2e097847fd36087a/rpds_py-2026.9.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:45bc6bccf78b20fd834237d18db64965d7ee68ba7f60440a26c7ab71e7b8d51a", size = 343267, upload-time = "2026-10-04T16:31:16.827Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0c/c765b0059d532acb3b9c45d781ccc22f15a96dbe443d00903f643ba9df10/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d55198263bb51f557550c6ed2e6d1cb6a6fed6eb5c9120b741c5926bef8a45d", size = 374555, upload-time = "2026-10-04T16:31:18.931Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8a/cafddfda77564a10cd21184640c3bffda6a2b8d20972fb5dedd5e0166328/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8763f20692da7df39b0afdd1ba3042b004c50a45994f76c2d9a25641f7673db", size = 378346, upload-time = "2026-10-04T16:31:20.75Z" }, + { url = "https://files.pythonhosted.org/packages/b9/01/5e626016eff72c183bf6c96539240cace15d402468647a453ec08415b2fc/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e43d4a1f673e8a1cbd8533e809e02b4bf9d4f2280269bb640436556312121250", size = 492373, upload-time = "2026-10-04T16:31:22.614Z" }, + { url = "https://files.pythonhosted.org/packages/3b/9c/15a2469e9389242f46896b3f0a01d68caea8a5a35c011fcb05ef333aae73/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea394a937f17a54c51239348bdbe2e3518124c8d4a8951ba04a311d3095bd18f", size = 394371, upload-time = "2026-10-04T16:31:24.768Z" }, + { url = "https://files.pythonhosted.org/packages/63/f5/c100ff77e1e6366e947c75969c258fdfc4b7bc5bbfe7351e62ffbf2a1228/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdeaa99ce822dca76cfb1b993e9120c5ea212f2eb66d48950ad63c349668a018", size = 375132, upload-time = "2026-10-04T16:31:26.588Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f4/fe0269c9de253e99c81cabc12b8971a5feaa083debdaff1221e06264d9e3/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:b4f062343e7ad3fa94f2c66e5ae667dee47ee74dd41a9057c4fbe163236a123d", size = 377642, upload-time = "2026-10-04T16:31:28.677Z" }, + { url = "https://files.pythonhosted.org/packages/05/65/b34a7b257baccff8f4a24a722933166d4941d5ebdc9c3f4bc4ffcd5ce4f4/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22ffd29a63d71fb1b81552c21f2c2b734949b7ac751a9be70675a939a900839b", size = 400855, upload-time = "2026-10-04T16:31:30.802Z" }, + { url = "https://files.pythonhosted.org/packages/98/32/844e54176b6071b90b38a564e6940bc6eb8f97b2890dc709c19db9dec0f4/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:08dae4a4095150a7c4545a1fb40b98e1ab1744fbc2770d92c977b9dadaa49ab6", size = 552573, upload-time = "2026-10-04T16:31:32.709Z" }, + { url = "https://files.pythonhosted.org/packages/17/73/6041d20729dffbfdf155c02d65be58bc225a1c1fb548fd87c23ef306138f/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:9a0460d43603d1fd9ef59c30278531e15d78581721ddb538fa560aa7817ea4ad", size = 615840, upload-time = "2026-10-04T16:31:34.565Z" }, + { url = "https://files.pythonhosted.org/packages/af/9e/418094adaee6b056ce199051b255448ed872829051e341b2294c80da0977/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:1c2d1f6da5128eabf34e963d7163a818846075a52568250d006c4c953b40f903", size = 582764, upload-time = "2026-10-04T16:31:36.665Z" }, + { url = "https://files.pythonhosted.org/packages/3d/9b/1698ebf6b840ddfe8b472198abbed6ace35c6e398faeecd6c47dae742a4e/rpds_py-2026.9.1-cp315-cp315t-win32.whl", hash = "sha256:5c6ee90dee3e85e055ddfd502d611643d9b0fd94c818220bda84ec3dacd9b27b", size = 203795, upload-time = "2026-10-04T16:31:38.53Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e2/91f70d804c61f8eac39a417e82aa1024f655ab9e8bdd7393b196242bc41b/rpds_py-2026.9.1-cp315-cp315t-win_amd64.whl", hash = "sha256:fe5ad0664ec772b02c45859041aa17655709cced7a31005817fbbbd988c25567", size = 223037, upload-time = "2026-10-04T16:31:40.468Z" }, + { url = "https://files.pythonhosted.org/packages/a3/90/a9ba81408369d34c1aca73319c15adc91ed45c1d21e9e8ee4832ffb7fe0b/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdc537c8633d7fd92a82e2e0d2ab74320a3f63d5e59fb9cf08711e08fe151c4", size = 381109, upload-time = "2026-10-04T16:32:08.994Z" }, + { url = "https://files.pythonhosted.org/packages/b3/44/5192a0bed94cec86bd2a5e1cc5a1bb8f7eec3aec907eacd2deb13e87e326/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10e208f2425d973938afcd56e28a7c4be32e27b6a60b5d381f49fb9d8acf9759", size = 388222, upload-time = "2026-10-04T16:32:11.321Z" }, + { url = "https://files.pythonhosted.org/packages/92/cd/5356549711448f18b52f7a11ffbe90f1228774996fbf3c6cd1b18d22abaf/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c0dbbcc19735fe5f8b0a54c07659d154a9e69f47e15d0a6ab7299215daf62cb", size = 500384, upload-time = "2026-10-04T16:32:13.478Z" }, + { url = "https://files.pythonhosted.org/packages/7a/88/ddda9d28adfe33119c75b2e733d4ba7e326f41d7e1b1093951771768ca48/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684fd492fff4fead00587544e059be2bbcb6f93454f21fa2a91b66fc7508be82", size = 401661, upload-time = "2026-10-04T16:32:15.653Z" }, + { url = "https://files.pythonhosted.org/packages/32/c3/bb59ba16a6b4a57995d15b8c04c00f28df3b938c4dcdde48fbe0f73edb0c/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1028417bb44037eb3069c1009bd7b7277212876cda22fbe565b0bca9fab6d2c", size = 380748, upload-time = "2026-10-04T16:32:17.727Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b8/0580faa1c5a32ddc160130dd7ae54d2d007272a89a40a6b5db3e50f9f585/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:492e5e428cbe126221611f47e068f01660352feec4ad18bc0f5ea9b2ae88fb14", size = 385731, upload-time = "2026-10-04T16:32:19.855Z" }, + { url = "https://files.pythonhosted.org/packages/bf/70/f73564642bbe3322c7eeef2c2f258cf040b71c41a430b532e59d04a1b838/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:88b5268892fde430d5531f95bc560b6efbbd67c929662c586afd729a96e7461c", size = 412131, upload-time = "2026-10-04T16:32:22.285Z" }, + { url = "https://files.pythonhosted.org/packages/8c/5d/17fff2e1f8f68721a2afb5cb48f7e442c751bb6b4883157c5abaf618cd08/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:01445c8d194aa032a08e944f16567672da1c62dbdbefd8b6d0693032e290cf68", size = 558193, upload-time = "2026-10-04T16:32:24.4Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d0/869ab6fb08531f97aae4a780b4d61b4190d8aef48fe054ee28bcf7114466/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_i686.whl", hash = "sha256:eef6a03b0b6d08d0835ccfa8ec8d1bc70525e3801387567137b50c557695e6da", size = 622448, upload-time = "2026-10-04T16:32:26.844Z" }, + { url = "https://files.pythonhosted.org/packages/ba/a5/9672e532fe02cd3b92c78cfd8743abca939d96853006c63835009a1ecb6f/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6b9bf3135b4ad5981df9a73d71a35272d650a2985ae9c2746357b24d59de2448", size = 591126, upload-time = "2026-10-04T16:32:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/80/ef/3a9f8e4279c7920af561deed4cb7ebebed2794a8f608cf404d5eef14a105/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_10_12_x86_64.whl", hash = "sha256:56c6952a9b15047466d0c2347c446a761d4527f89976156341e68f0ce5cc08b0", size = 357108, upload-time = "2026-10-04T16:32:31.641Z" }, + { url = "https://files.pythonhosted.org/packages/b7/55/4b2fa381a583760aea5c92841e4e928a358e1c6511b129219e9c2826a226/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_11_0_arm64.whl", hash = "sha256:b242c27c8f836305a4a72df9cdd564386ac57b807bd252a063223331c9316b37", size = 346877, upload-time = "2026-10-04T16:32:34.061Z" }, +] + +[[package]] +name = "ruff" +version = "0.17.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e7/e6d5749983b020e6cb1055abec0a6f361a8e94f0184cdcf56d4760995f02/ruff-0.17.1.tar.gz", hash = "sha256:5bb796c5112e9fb9527f2ef2faa0a130d6312d19de92bcfaddd70dbb2d41020f", size = 5323349, upload-time = "2026-10-15T15:23:18.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/78/90c46ca6250709f7c37e397b60d06061adee8d0f7d13959ed6a8e49b14fd/ruff-0.17.1-py3-none-linux_armv6l.whl", hash = "sha256:1796c41eafec66f4635125dd1e074a7aa27b8d20c187d484360acf11d247fc4a", size = 10147528, upload-time = "2026-10-15T15:22:33.667Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d2/a2e28bc35b083ae51fa07dfba5280a667c8b01ecaee7802fc8849dcd5c46/ruff-0.17.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8eadb09a788010be29c895418bdfa513e4e1c65e64b94e5b19e4cd381f6cc7fb", size = 10225974, upload-time = "2026-10-15T15:22:36.328Z" }, + { url = "https://files.pythonhosted.org/packages/8e/71/7a9029a81c8206ee01a98f6cfeeb56e6c095af86857581a37045c46d7e94/ruff-0.17.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:29b454f18ca3eeaf37fbf140841dcf27d36109e29dee9aae8acecb68c26c6f74", size = 9270361, upload-time = "2026-10-15T15:22:38.651Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8c/e075e9c917cb0575297880c96768304e881240171c870cbd8d9b7b54bec2/ruff-0.17.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872e03dd231744d6c5ec5c8af6be52b71323fc6ee096e4c8b34d9f844ee3b978", size = 9938300, upload-time = "2026-10-15T15:22:41.284Z" }, + { url = "https://files.pythonhosted.org/packages/87/27/0b4bb926a49de2383f161272b4d863571a4c7ecdbf595a6bc58813a13367/ruff-0.17.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4c0d6cb5f8fbac77eec9af49f4fc0eaf856b05545e372b0694d24b4e76b1c640", size = 9948464, upload-time = "2026-10-15T15:22:43.681Z" }, + { url = "https://files.pythonhosted.org/packages/14/27/518d57e0e02aecb8ea4acac6b57b51a53173d25fa734952bfdd7d531e88e/ruff-0.17.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78beced4a3c94dfedbee4b999b95b6a27b35820fdc0afbacc6d37a8da26c1cd1", size = 10638639, upload-time = "2026-10-15T15:22:46.081Z" }, + { url = "https://files.pythonhosted.org/packages/01/82/d89a4e498ade59e6cee52d67f8da569019372212b87468c1fdeae884601c/ruff-0.17.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7feefc63921202894f0e158b0e32f45a5950d70a7fb693ccb9264816c25b1c05", size = 11337238, upload-time = "2026-10-15T15:22:48.894Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7c/3b0fdef9352656317c977086fe1d802902406e4f2a0d8578da90c0e6d1c5/ruff-0.17.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684154861a819bf1f433669d2a0ce9c3e54677c65b8ebb866cc2a7ec86345785", size = 10896327, upload-time = "2026-10-15T15:22:51.45Z" }, + { url = "https://files.pythonhosted.org/packages/62/86/5566290219708ce2928f3a29c4f843a1185b341ec6111c4631a33c5ceced/ruff-0.17.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6ef98e51de8ef38082f90653ceeb84944bd7673783eea13e1647c5b9b064189", size = 10350811, upload-time = "2026-10-15T15:22:54.401Z" }, + { url = "https://files.pythonhosted.org/packages/ad/d2/ca8462dabb3c413990d49703ba306c30c862195a75448d080fa8fcce9775/ruff-0.17.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:8f9aa5b5bd5fa1937803ea609c8f153b8de39bf3e0e149897ae34b0c5b52f467", size = 10569994, upload-time = "2026-10-15T15:22:57.142Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ad/dd1864c1f1db17c8cfb297ce70b352388e6977620f66f7182c52855407df/ruff-0.17.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:80e53b0e5faa3c5667f035daaa032893ae42b7cfe708c886d39ed131e54688ab", size = 10059672, upload-time = "2026-10-15T15:23:00.084Z" }, + { url = "https://files.pythonhosted.org/packages/65/45/3f56cf1d2168c2165cdd5ac6f9668aee66a4cfdd4caf2b2cc5ccb2b1d568/ruff-0.17.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:056c5d5fa0ac790051ae165d7035c7bf956d02de2db557f2e9b31d877a505fca", size = 9947803, upload-time = "2026-10-15T15:23:03.132Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4b/5457cb2be4c1d1ea5e919558131a0f197a4a454a0530d9e30820e8206e4c/ruff-0.17.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bd8f5a55b10f371642eacd0e8665a42a8b97da15c9a7187c79e697b77b5e0ce4", size = 10351807, upload-time = "2026-10-15T15:23:05.628Z" }, + { url = "https://files.pythonhosted.org/packages/49/fb/db15b4f8fa24a1e36b99e1401f42ef6df16ee299a48670d5d262b771e7d7/ruff-0.17.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ce05e6f3973611d9550a600e04bb531061e368baba31610eb57c1509a8f21a0a", size = 10765716, upload-time = "2026-10-15T15:23:08.092Z" }, + { url = "https://files.pythonhosted.org/packages/0a/e8/1e186578076aff7a80735f625005fde678412ab609cd323ed182eb7d6b87/ruff-0.17.1-py3-none-win32.whl", hash = "sha256:1de0030a8aa78c65c5fecb84b2e5c390ac684c0452875a02afc7c083d49a496a", size = 9895093, upload-time = "2026-10-15T15:23:10.582Z" }, + { url = "https://files.pythonhosted.org/packages/6a/2e/da3d9589bae8e8b58f3a48bd5bc0b980232fb14a83bf02c3be7660f87c1b/ruff-0.17.1-py3-none-win_amd64.whl", hash = "sha256:5df76f16580fab58d0f6c98a3ac254a4abceb7b2489b8b678335869cff77b3d7", size = 10097955, upload-time = "2026-10-15T15:23:13.309Z" }, + { url = "https://files.pythonhosted.org/packages/df/c9/0f2a4dea06a5e12c1191ee3d96b1e1233797d0d5e18f97a2b909a95a9836/ruff-0.17.1-py3-none-win_arm64.whl", hash = "sha256:42400b9a6ff8515ff27796f07f92e0195be011c86e81e381606f58ea5502fef4", size = 9853542, upload-time = "2026-10-15T15:23:16.05Z" }, +] + +[[package]] +name = "ty" +version = "0.0.90" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/b1/613b5534624442a9118828d7a9e54d50b16f0f5c8b67c80eb6623f33b921/ty-0.0.90.tar.gz", hash = "sha256:25cef63ec07a0254c2f5d885a63b001d0bfa437b20caa0a408f4f52e66b133e7", size = 7996206, upload-time = "2026-10-20T14:25:19.477Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/33/0e3395afa2c31c0e8e91547629858d2a5de213c69af237e6e50f37545565/ty-0.0.90-py3-none-linux_armv6l.whl", hash = "sha256:0dedb54977b40bc86638fec2c90eefd593f3a6683003a86b7e6cb67c17bcc476", size = 14281945, upload-time = "2026-10-20T14:24:21.018Z" }, + { url = "https://files.pythonhosted.org/packages/d7/fd/5d632b2f88d5c18991a4936da8643c7f204cfbc4980f8c7cd9080af988ad/ty-0.0.90-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3d7c30ceaac76dfbfcf36b72d36272d21c3898e98fc4de296aa9cbae956dec9d", size = 13786355, upload-time = "2026-10-20T14:24:24.392Z" }, + { url = "https://files.pythonhosted.org/packages/79/08/0d2f37bb4f766ab9630f01b07f4d11f1f7a6a6188f920d5ca9fa8a4676b1/ty-0.0.90-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c0b7e4d9ae0939294f0a18652de9ad7d81da2d7f567cf93f1edda1263008c124", size = 12856535, upload-time = "2026-10-20T14:24:27.386Z" }, + { url = "https://files.pythonhosted.org/packages/e4/77/70658f6b80c345ae0c12f2192a5cc89b8ca13eccfe06616b0fac3806c261/ty-0.0.90-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c4a095a86a132df374e652894fe08392aeb1601d6347e1eb4b58808094a302", size = 13696342, upload-time = "2026-10-20T14:24:30.413Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3e/693049f93653d2f6412bb0c2c0af1d01675e31643af29bef7177d3ff7e79/ty-0.0.90-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e24a8aa07c05d9d14648289e79a88b7c7c2c522c58b53bb5f466a6ba4704e22", size = 14014180, upload-time = "2026-10-20T14:24:33.783Z" }, + { url = "https://files.pythonhosted.org/packages/27/08/19e373f97501eaadc8fc42e8c07cd54a64e375fbcf1470797be13590d5ba/ty-0.0.90-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40c3ea8fc1dfcf7502f71b93b12e80da1f7a8a5fd7e55ec9feabcf4ac39f72ea", size = 14935189, upload-time = "2026-10-20T14:24:37.459Z" }, + { url = "https://files.pythonhosted.org/packages/33/54/3331984f2c896a7383b6b18c86e968a63dd046baf503119a8e8e7682c752/ty-0.0.90-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1af75532bbe3e305089c30806fa5e804f8b01de231c1fa07918f7f3b335626da", size = 15311482, upload-time = "2026-10-20T14:24:40.87Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f3/179acf8d730c2c864767ffcc9081f5ea6fdb1b34ef711f1bd226200e9cff/ty-0.0.90-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f09449b34d837a044dab043aeb2b4b6ff2d2cef5eaf8116c7c19d34cc2a16a21", size = 15278844, upload-time = "2026-10-20T14:24:44.539Z" }, + { url = "https://files.pythonhosted.org/packages/71/7e/661bc2fa20e0ac84c4d5f92e4c098ec667a0e920851a6d10c10a0251f0dc/ty-0.0.90-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc868ffa7dfcb3169eea3ba7d634e5a3283c7133fb932c6e47a2e16620d26ca5", size = 14558774, upload-time = "2026-10-20T14:24:47.814Z" }, + { url = "https://files.pythonhosted.org/packages/f4/2e/3f65f61f4545f75255373be7646a606e004bb4cdc851e236bf17ca94bdc2/ty-0.0.90-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e2405206533dc896a2b711e781f2955d5883d85536f4df0ac262fca6517103c2", size = 14788158, upload-time = "2026-10-20T14:24:51.223Z" }, + { url = "https://files.pythonhosted.org/packages/1e/10/3c91a529591667b89d63c86806bfe2ac56d6989c7e0a09ee0964b7512deb/ty-0.0.90-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0dca4a29e8778285d2fc204af19254571486106fd14aed60769bfd272c795f6f", size = 13687177, upload-time = "2026-10-20T14:24:54.611Z" }, + { url = "https://files.pythonhosted.org/packages/21/b2/1b6d48606c67614bfb0c8e61a5d67a053ca1e3c5956ddb584f8569b8dc3d/ty-0.0.90-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d004b8e4e898fead929eceea669b73936444671748e0dd44e624cc109346c0dd", size = 14027780, upload-time = "2026-10-20T14:24:59.045Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c4/a0771debf725312524ca1434f8a146d37e573d45257ca4bebb9cc8e35bbc/ty-0.0.90-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6be182da4281b4581c4a1b27c6a0caebeed7212e4bdc98c6b8fe0d9bc36dea0", size = 14355890, upload-time = "2026-10-20T14:25:03.034Z" }, + { url = "https://files.pythonhosted.org/packages/a7/4c/036724b6936ffc38e28ff5e20ab7972d609c65a3dd9645f3d10f57cfd16f/ty-0.0.90-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0ba6fe0a24ff4cbc5034f3aa1c88b3ad1397315dd3369357e694fd157a11864e", size = 14692306, upload-time = "2026-10-20T14:25:07.461Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2a/c74fd5fc3fb5b046fe06a9067cabf5417b73e28249dc9af90ef72700f8fd/ty-0.0.90-py3-none-win32.whl", hash = "sha256:4c46a79caf84c4da0f7293e16bd769bd467c7cbc38015cac7608ab4e5ec8ba9c", size = 13235434, upload-time = "2026-10-20T14:25:10.545Z" }, + { url = "https://files.pythonhosted.org/packages/d2/54/be5cd6b17d8087a5e4c26892311c07e39d42b66c925b0f06cfc51a9ce83b/ty-0.0.90-py3-none-win_amd64.whl", hash = "sha256:8d77c16d20201b7a07ccaafb610eaf60488783dbba9865c4f9182e584f1426f8", size = 13855668, upload-time = "2026-10-20T14:25:13.648Z" }, + { url = "https://files.pythonhosted.org/packages/33/68/6dea089a897e8b314504eecc2633de3c8fe14f70e71a35606d14a2ba169e/ty-0.0.90-py3-none-win_arm64.whl", hash = "sha256:bfb63e74eeedb0a29d49cf58d611c540bfdfc0975dfce26efc6575bcf439208d", size = 13330853, upload-time = "2026-10-20T14:25:16.642Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.14.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "python-discovery" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7f/be/4d1d59d309db76b5808fcfd78bd5996f4e7241366691c38fc331a3136398/virtualenv-21.14.11.tar.gz", hash = "sha256:593052d8477ea8c55a842387ce111bd08c72618f0c1133c302cafe335e570a57", size = 5503091, upload-time = "2026-10-18T07:06:34.716Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/6b/d85da8982b41190eafcb9df91dff9d83fc6989e98af4b5be4c8f85510c95/virtualenv-21.14.11-py3-none-any.whl", hash = "sha256:b319f8590a84e5de5f8f2c803ecd2237e9bc0ffa7c1e875e3169c107cecb7454", size = 5495268, upload-time = "2026-10-18T07:06:32.719Z" }, +] diff --git a/python/spec-kit/.pre-commit-config.yaml b/python/spec-kit/.pre-commit-config.yaml index ca2af49..c98d770 100644 --- a/python/spec-kit/.pre-commit-config.yaml +++ b/python/spec-kit/.pre-commit-config.yaml @@ -97,7 +97,8 @@ repos: .*\.lock| .*\.parquet| .*\.feather| - .*/dfo_descriptions/vectors/.*\.json + .*/dfo_descriptions/vectors/.*\.json| + .*/dfo_client_contract/.*\.json )$ # --------------------------------------------------------------------------- diff --git a/tools/README.md b/tools/README.md index 91f0700..6fe2b93 100644 --- a/tools/README.md +++ b/tools/README.md @@ -38,6 +38,18 @@ uv run tools/validate_provenance_docs_vectors.py uv run tools/validate_descriptions_vectors.py ``` +`validate_client_contract.py` validates the client contract under `python/client-contract/src/dfo_client_contract/` against its schemas, then checks what they cannot express: every `strict-fields.json` pointer resolves in `served/openapi.json` and stays required and non-nullable, or keeps its enum values; `actions.json` holds one row, in code order, for each active refusal code in `registries/codes.json` that reaches a problem document or a no_data reason, with a gap kind exactly for the no_data reasons; `client-codes.json` lists each code a client raises itself once, in code order, none of them a code in `actions.json` or the registry, each with a class a scenario names and a retryable flag; `proxy-codes.json` and `warning-codes.json` list their codes once, in code order, apart from every other table, and the warning codes are those the client rules issue; `served/openapi.json` holds the Search, Datasets, Graph and Presentation surfaces and nothing outside them but the platform's `/codes` route; each recorded scenario's requests match a served route and its JSON bodies validate against that route's schemas, where a required member stays required when it admits null; every problem document in a scenario, synthetic ones and failed operations' errors included, carries an active code registered at its status, and every website proxy body a code `proxy-codes.json` lists at its status; each recorded scenario names `served/SOURCE.json`'s commit; each scenario's `expect` equals the outcomes its steps reach over its exchanges, with refusals' error classes and gap kinds from `actions.json`, each error the client raises itself carrying its code and class from `client-codes.json`, a repeated refused request counted a retry only where the retry rules allow one, a record that stops retrying while a retry remains refused, and the waits before retries and the warnings response headers issue derived; each POST carries its body, each build posts the body its spec, narrowing and layout give, each Search request posts the whole body its steps derive, each poll names the operation the client holds, and each signed download is the URL its redirect names; each body file a record names is a bare file name in `scenarios/` and no symlink; every absolute URL a record holds is a signed URL on the storage host with the redacted query, or a `location` under the base URL; and each `DatasetRef` example gets the verdict it states. It does not import `dfo_client_contract`, whose `tests/test_rules.py` replays the rule vectors. Also a PEP 723 script: + +```bash +uv run tools/validate_client_contract.py +``` + +`capture_client_contract.py` refreshes the client contract from dfo-apis. `openapi --dfo-apis PATH` builds the composed app in that checkout's environment, in process, and writes `served/openapi.json` and `served/SOURCE.json`, refusing a checkout with uncommitted changes or untracked files and an environment out of step with its `uv.lock`; `record` runs the contract's scenarios against a base URL, dev by default, writes the records with every absolute URL's query redacted and a local app's signed URLs written as storage URLs, refusing a record that still names any other host, derives the synthetic ones and validates the result, and `record --offline` derives the outcomes again from the records with no request. A recorded scenario holds only exchanges the server made. `record` refuses a recorded scenario that a canned exchange answered, and a synthetic derivation makes no request. Nothing in a record marks an exchange as canned, so `validate_client_contract.py` cannot check this rule and the capture enforces it. It reads and writes a binary body only through a bare file name beside its record, and refuses a name that is absolute or leaves that directory, or a symlink, before it reads or writes anything. It imports its outcome rules from `validate_client_contract.py`. `python/client-contract/README.md` has the recipe. A PEP 723 script whose tests run without network or pyarrow: + +```bash +uv run tools/capture_client_contract.py record +``` + `validate_unit_vectors.py` validates every file under `vectors/units/` against `schemas/vectors/unit-vector.schema.json`, and checks what the schema cannot express: file names match names, names are unique, the suite meets its floor, and every classification, compare outcome and typed-unit kind has a vector. It does not import `dfo_spec_kit`. Also a PEP 723 script: ```bash diff --git a/tools/capture_client_contract.py b/tools/capture_client_contract.py new file mode 100644 index 0000000..08310de --- /dev/null +++ b/tools/capture_client_contract.py @@ -0,0 +1,4490 @@ +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "jsonschema>=4.23", +# "pyarrow>=15", +# ] +# /// +"""Capture the client contract's served document and record its scenarios. + +Usage: + uv run tools/capture_client_contract.py openapi --dfo-apis PATH + uv run tools/capture_client_contract.py record [--base-url URL] + [--only NAME ...] [--offline] [--scenarios-dir DIR] + +`openapi` builds the composed dfo-apis app from the checkout at PATH, with +the deployed surfaces (Search, Datasets, Graph and Presentation), by +calling `dfo_apis.app.create_app()` in that checkout's environment. It +writes `app.openapi()` to `served/openapi.json` and the checkout's commit to +`served/SOURCE.json`. No server runs. The surfaces load an origin catalogue +and a graph release when they are built, so the capture publishes the +checkout's own test catalogue and test release into a temporary directory. +The document does not depend on the data they hold. A checkout with +uncommitted changes to tracked files is refused, because the commit would +not describe the document. + +`record` runs every scenario this file defines against the API at the base +URL (dev by default, or a local app at `http://127.0.0.1:8083/api`), the way +a client would, and writes each record and its binary bodies to `scenarios/`. +Each recorded scenario checks that its live answer has the shape the +scenario is named for, and the run refuses to write one that does not. With +`--offline` no request is made. Each recorded scenario's steps run again +over its own exchanges and rewrite its `expect`, and each synthetic scenario +is derived again from its parent. A synthetic derivation makes no request +in either mode. Synthetic scenarios are derived from the recorded records +after them, so a recording refreshes both, and a synthetic record names its +parent's body files and holds no copies. Every absolute URL a record keeps, +a signed download or a `location` header, keeps its path and has its query +replaced by `X-Goog-Signature=redacted`. A local app's blob URL becomes the +storage URL a deployment signs. A record holding any other absolute URL, +outside a `location` under the base URL, is refused. The long builds need +two specs the server has not built, so a local recording starts on a fresh +datasets database. `--scenarios-dir` writes outside the package, +unvalidated. The run ends by validating the whole contract with +`tools/validate_client_contract.py`, and fails when it reports a problem or +the binary bodies pass 5 MB. + +The outcome rules, error classes, gap kinds and long-build pacing come +from `tools/validate_client_contract.py`, so a record's `expect` is written +by the code that checks it. pyarrow loads only when a Parquet body is read, so +the tests run without it. +""" + +from __future__ import annotations + +import argparse +import copy +import io +import json +import os +import re +import subprocess +import sys +import tempfile +import time +import urllib.error +import urllib.request +from collections.abc import Callable, Mapping, Sequence +from dataclasses import dataclass, field, replace +from datetime import UTC, datetime +from pathlib import Path +from typing import Any, Protocol +from urllib.parse import quote, unquote, urljoin, urlsplit, urlunsplit + +from validate_client_contract import ( + FILE_EXPIRED, + FILE_GONE, + FILES_ROUTE_FILE, + FILES_ROUTE_REDIRECT, + NO_VERSIONS, + POLL_BACKOFF_CAP, + POLL_BACKOFF_FIRST, + POLL_PATH, + SIGNED_FETCH_STATUS, + STORAGE_ORIGIN, + TRACE_HEADER, + VERSION_UNAVAILABLE, + Answer, + ClientError, + LongBuild, + absolute_url_problems, + answer_from_body, + answer_gaps, + answer_members, + answer_outcome, + artifact_route, + body_path, + build_body, + candidate_label, + choice_for, + choice_input, + data_warning, + dataset_summary, + digest_of, + download_target, + failed_operation, + gap_kinds, + header_warnings, + held_spec, + may_retry, + newest_listed, + owns_body_file, + part_label, + pick_artifact, + posted_scope, + problem_body, + read_from, + refusal_error, + rendering_for, + resubmitted_sentence, + retry_wait, + search_body, + search_warning_code, + search_warns, + selector_path, + sentence_entry, + shared_cacheable, + stored_version, + surface_problems, + trace_id, + untraced, + versions_path, + with_step_notes, +) +from validate_client_contract import main as validate_main + +REPO_ROOT = Path(__file__).resolve().parent.parent +PACKAGE_DIR = REPO_ROOT / "python" / "client-contract" / "src" / "dfo_client_contract" +DEV_BASE_URL = "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api" +REPOSITORY = "DevelopmentFinanceObservatory/apis" +BINARY_BUDGET = 5_000_000 + +# The rendering both clients ask for, bare long Parquet. +RENDERING = {"format": "parquet", "bundle": False} +# The response headers a client reads, and so the ones a record keeps, beside +# a `cache-control` that marks the response shared-cacheable, which excuses it +# from carrying `x-dfo-trace-id`. +KEPT_HEADERS = ( + "content-type", + "location", + "retry-after", + "deprecation", + "sunset", + "x-dfo-warning", + "x-dfo-trace-id", +) + + +def dump_json(document: Any) -> str: + """`document` in the kit's JSON formatting: two-space indent, non-ASCII + kept, one trailing newline.""" + return json.dumps(document, indent=2, ensure_ascii=False) + "\n" + + +def _write_json(path: Path, document: Any) -> None: + path.write_text(dump_json(document), encoding="utf-8") + + +# --- the served document ---------------------------------------------------- + +# Runs in the dfo-apis checkout's environment, with the checkout as cwd. +_CAPTURE_SCRIPT = """ +import json, os, sys, tempfile +from pathlib import Path + +with tempfile.TemporaryDirectory() as tmp: + from tests.graph_release.support import build_session_release + from tests.origin_catalogue.support import publish_sample + + os.environ["ORIGIN_CATALOGUE_URI"] = f"file://{tmp}/origin-catalogue" + publish_sample(os.environ["ORIGIN_CATALOGUE_URI"]) + os.environ["GRAPH_RELEASE_URI"] = f"file://{tmp}/releases" + build_session_release(os.environ["GRAPH_RELEASE_URI"]) + from dfo_apis.app import create_app + + document = create_app().openapi() +Path(sys.argv[1]).write_text(json.dumps(document), encoding="utf-8") +""" + +# The deployed composition's surface flags, Search always mounted beside them, +# and placeholders the surfaces need to be built, none of which reaches the +# document. Skills is not deployed, so its routes stay out of the document. +_CAPTURE_ENV = { + "SEARCH_GRAPH_BASE": "https://graph.offline.invalid", + "DFO_PUBLIC_SITE_URL": "https://site.example", + "DFO_DATASETS_SURFACE": "1", + "DFO_GRAPH_SURFACE": "1", + "DFO_PRESENTATION_SURFACE": "1", +} +_PASSED_ENV = ("HOME", "PATH", "TMPDIR", "UV_CACHE_DIR", "UV_PYTHON") +# The dfo-apis extras the composed app imports. +_EXTRAS = tuple( + f"--extra={extra}" for extra in ("eval", "api", "engine", "datasets", "graph") +) + + +def capture_env(environ: Mapping[str, str]) -> dict[str, str]: + """The capture's environment: a few of the caller's variables and the + placeholders, so a variable in the caller's shell cannot reach the app.""" + env = {name: environ[name] for name in _PASSED_ENV if name in environ} + env.update(_CAPTURE_ENV) + return env + + +def _git(checkout: Path, *args: str) -> str: + return subprocess.run( + ["git", "-C", str(checkout), *args], + check=True, + capture_output=True, + text=True, + ).stdout.strip() + + +def capture_openapi(checkout: Path) -> tuple[dict[str, Any], str]: + """`app.openapi()` of the composed app in `checkout`, and its commit. + + Refuses a checkout with uncommitted changes or untracked files, and an + environment that differs from the checkout's `uv.lock` with every extra + the composed app needs, since either would make the commit misdescribe + the document.""" + if _git(checkout, "status", "--porcelain"): + raise SystemExit(f"{checkout} has uncommitted changes or untracked files") + commit = _git(checkout, "rev-parse", "HEAD") + check = subprocess.run( + ["uv", "sync", "--project", str(checkout), "--frozen", "--check", *_EXTRAS], + cwd=checkout, + capture_output=True, + text=True, + check=False, + ) + if check.returncode != 0: + raise SystemExit( + f"the environment in {checkout} differs from its uv.lock; run " + f"`uv sync --frozen {' '.join(_EXTRAS)}` there:\n{check.stderr}" + ) + with tempfile.TemporaryDirectory() as tmp: + out = Path(tmp) / "openapi.json" + result = subprocess.run( + [ + "uv", + "run", + "--project", + str(checkout), + "--frozen", + "--no-sync", + "python", + "-c", + _CAPTURE_SCRIPT, + str(out), + ], + cwd=checkout, + env=capture_env(os.environ), + capture_output=True, + text=True, + check=False, + ) + if result.returncode != 0: + raise SystemExit(f"the capture failed in {checkout}:\n{result.stderr}") + document = json.loads(out.read_text(encoding="utf-8")) + if problems := surface_problems(document): + raise SystemExit( + "the captured document is not the deployed composition:\n" + + "\n".join(problems) + ) + return document, commit + + +def write_served( + package_dir: Path, document: dict[str, Any], commit: str, captured_from: str +) -> None: + served = package_dir / "served" + _write_json(served / "openapi.json", document) + _write_json( + served / "SOURCE.json", + { + "format_version": 1, + "repository": REPOSITORY, + "commit": commit, + "captured_from": captured_from, + }, + ) + + +# --- transport and recorder ------------------------------------------------- + + +@dataclass(frozen=True, slots=True) +class Response: + status: int + headers: dict[str, str] + body: bytes + + def json(self) -> Any: + return json.loads(self.body) + + +class Transport(Protocol): + def __call__( + self, + method: str, + url: str, + *, + body: bytes | None, + headers: Mapping[str, str], + timeout: float, + ) -> Response: ... + + +class _NoRedirect(urllib.request.HTTPRedirectHandler): + """Leaves a redirect to the caller, since the files route's 302 is read by hand.""" + + def redirect_request(self, *_: Any, **__: Any) -> None: + return None + + +def urllib_transport( + method: str, + url: str, + *, + body: bytes | None, + headers: Mapping[str, str], + timeout: float, +) -> Response: + request = urllib.request.Request( + url, data=body, method=method, headers=dict(headers) + ) + opener = urllib.request.build_opener(_NoRedirect) + try: + with opener.open(request, timeout=timeout) as reply: + return Response(reply.status, _lower(reply.headers.items()), reply.read()) + except urllib.error.HTTPError as error: + return Response(error.code, _lower(error.headers.items()), error.read()) + + +def _lower(items: Any) -> dict[str, str]: + return {name.lower(): value for name, value in items} + + +# A local composed app signs no URL. Its launcher serves each file at +# `/__e2e__/blob/{bucket}/{object}` on the API's own origin. A record states +# such a URL as the storage URL a deployment signs for the same object. +LOCAL_BLOB_PREFIX = "/__e2e__/blob/" + + +def redact_external_url(url: str) -> str: + """An absolute `url` with its query, whatever signs it, replaced by + `X-Goog-Signature=redacted`, and a local app's blob URL rewritten to + `STORAGE_ORIGIN/{bucket}/{object}`, the object name percent-encoded as + storage signs it. A root-relative URL is returned as it stands.""" + parts = urlsplit(url) + if not parts.netloc: + return url + if parts.path.startswith(LOCAL_BLOB_PREFIX): + bucket, _, name = parts.path.removeprefix(LOCAL_BLOB_PREFIX).partition("/") + path = f"/{bucket}/{quote(unquote(name), safe='/')}" + parts = urlsplit(STORAGE_ORIGIN)._replace(path=path) + return urlunsplit(parts._replace(query="X-Goog-Signature=redacted")) + + +def _origin(base_url: str) -> str: + parts = urlsplit(base_url) + return f"{parts.scheme}://{parts.netloc}" + + +def _is_json(content_type: str) -> bool: + media = content_type.split(";", maxsplit=1)[0].strip() + return media == "application/json" or media.endswith("+json") + + +_EXTENSIONS = {"application/vnd.apache.parquet": "parquet"} + + +@dataclass +class Recorder: + """Sends requests the way a client does and keeps each exchange. + + `canned` exchanges answer the first requests, in order, before the + network. A request that is not the next canned one ends the run.""" + + name: str + base_url: str + transport: Transport + canned: list[dict[str, Any]] = field(default_factory=list) + exchanges: list[dict[str, Any]] = field(default_factory=list) + bodies: dict[str, bytes] = field(default_factory=dict) + commits: set[str] = field(default_factory=set) + canned_served: int = 0 + warned: set[tuple[str, ...]] = field(default_factory=set) + warnings: list[str] = field(default_factory=list) + read_trace: str | None = None + + def api(self, method: str, path: str, json_body: Any = None) -> Response: + """A request to `path` under the base URL.""" + return self._send( + method, {"path": path}, self.base_url.rstrip("/") + path, json_body + ) + + def origin(self, method: str, origin_path: str) -> Response: + """A request to a root-relative URL the server returned.""" + url = _origin(self.base_url) + origin_path + return self._send(method, {"origin_path": origin_path}, url, None) + + def external(self, url: str) -> Response: + """A bare GET outside the API, with no client header and no key.""" + return self._send( + "GET", {"url": redact_external_url(url)}, url, None, bare=True + ) + + def _send( + self, + method: str, + target: dict[str, str], + url: str, + json_body: Any, + *, + bare: bool = False, + ) -> Response: + request: dict[str, Any] = {"method": method, **target} + if json_body is not None: + request["json"] = json_body + if self.canned: + if self.canned[0]["request"] != request: + raise SystemExit( + f"{self.name}: {method} {url} is not the canned request " + f"{json.dumps(self.canned[0]['request'])[:300]}" + ) + exchange = self.canned.pop(0) + self.exchanges.append(exchange) + self.canned_served += 1 + self._traced(exchange["response"], bare=bare) + return self._warned(_canned_response(exchange["response"]), bare=bare) + + headers = {} if bare else {"user-agent": "dfo-client-contract-recorder/1"} + body = None + if json_body is not None: + headers["content-type"] = "application/json" + body = json.dumps(json_body).encode() + response = self.transport( + method, url, body=body, headers=headers, timeout=300.0 + ) + if not bare and "x-dfo-commit" in response.headers: + self.commits.add(response.headers["x-dfo-commit"]) + if not bare and untraced(response.headers): + raise SystemExit( + f"{self.name}: {method} {url} answered {response.status} with no " + f"{TRACE_HEADER} header, which the server sends on every response " + "but a shared-cacheable one" + ) + kept = self._keep(response) + self.exchanges.append({"request": request, "response": kept}) + self._traced(kept, bare=bare) + return self._warned(response, bare=bare) + + def _traced(self, kept: Mapping[str, Any], *, bare: bool) -> None: + """Notes an API response's trace id, as the record keeps it, as the + one an error raised on reading it carries.""" + if not bare: + self.read_trace = trace_id(kept.get("json"), kept.get("headers", {})) + + def _warned(self, response: Response, *, bare: bool) -> Response: + """Notes the warnings an API response's headers issue.""" + if not bare: + self.warnings.extend(header_warnings(response.headers, self.warned)) + return response + + def _keep(self, response: Response) -> dict[str, Any]: + kept: dict[str, Any] = {"status": response.status} + headers = { + name: redact_external_url(response.headers[name]) + if name == "location" + else response.headers[name] + for name in KEPT_HEADERS + if name in response.headers + } + if shared_cacheable(response.headers): + headers["cache-control"] = response.headers["cache-control"] + if headers: + kept["headers"] = headers + content_type = response.headers.get("content-type", "") + if response.body and _is_json(content_type): + kept["json"] = response.json() + elif response.body and 200 <= response.status < 300: + extension = _EXTENSIONS.get( + content_type.split(";", maxsplit=1)[0].strip(), "bin" + ) + stem = ( + self.name if not self.bodies else f"{self.name}-{len(self.bodies) + 1}" + ) + body_file = f"{stem}.{extension}" + self.bodies[body_file] = response.body + kept["body_file"] = body_file + return kept + + +def _canned_response(response: dict[str, Any]) -> Response: + headers = dict(response.get("headers", {})) + if "json" in response: + return Response( + response["status"], headers, json.dumps(response["json"]).encode() + ) + return Response(response["status"], headers, b"") + + +# --- the answer and dataset rules ------------------------------------------- + + +@dataclass(frozen=True, slots=True) +class Spec: + spec_id: str + definition: dict[str, Any] + sentence: str | None = None + entity_groups: dict[str, Any] | None = None + + def step(self) -> dict[str, Any]: + step: dict[str, Any] = {"spec_id": self.spec_id, "definition": self.definition} + if self.sentence is not None: + step["sentence"] = self.sentence + if self.entity_groups: + step["entity_groups"] = self.entity_groups + return step + + +def _step_spec(step: Mapping[str, Any]) -> Spec: + """The Spec a step's `spec`, or `held_spec`'s shape, holds.""" + return Spec( + step["spec_id"], + step["definition"], + step.get("sentence"), + step.get("entity_groups"), + ) + + +def _part_spec(spec: dict[str, Any]) -> Spec: + return _step_spec(held_spec(spec)) + + +def _members(answer: Answer) -> list[tuple[list[str], Spec]]: + return [(parts, _part_spec(spec)) for parts, spec in answer_members(answer)] + + +@dataclass(frozen=True, slots=True) +class Member: + parts: list[str] + definition: dict[str, Any] + content_version: str + sentence: str + digest: str + rows: int + columns: list[str] + rendering: dict[str, Any] = field(default_factory=lambda: dict(RENDERING)) + + @property + def spec_id(self) -> str: + return self.definition["spec_id"] + + def ref(self) -> dict[str, Any]: + return { + "parts": self.parts, + "sentence": self.sentence, + "spec": {"spec_id": self.spec_id, "definition": self.definition}, + "content_version": self.content_version, + "artifact": {"digest": self.digest, "rendering": dict(self.rendering)}, + } + + +def dataset_outcome( + members: Sequence[Member], + *, + missing: Sequence[Mapping[str, Any]] = (), + search_warning: bool | None = None, +) -> dict[str, Any]: + """A dataset outcome. Several members stack into one long table with a + `part` column first, holding each member's `part_label`, then every + member's columns in member order.""" + summaries = [ + { + "parts": member.parts, + "spec_id": member.spec_id, + "content_version": member.content_version, + "sentence": member.sentence, + } + for member in members + ] + dataset: dict[str, Any] = {"rows": sum(member.rows for member in members)} + if len(members) == 1: + dataset["columns"] = list(members[0].columns) + else: + columns = dict.fromkeys(c for m in members for c in m.columns) + dataset["columns"] = ["part", *columns] + dataset["part_rows"] = [ + {"part": part_label(summary), "rows": member.rows} + for summary, member in zip(summaries, members, strict=True) + ] + summary = dataset_summary(summaries, missing, search_warning=search_warning) + return {"dataset": {**dataset, **summary}} + + +def parquet_shape(data: bytes) -> tuple[int, list[str]]: + import pyarrow.parquet as pq # noqa: PLC0415 - optional, so the tests run without it + + parquet = pq.ParquetFile(io.BytesIO(data)) + return parquet.metadata.num_rows, list(parquet.schema_arrow.names) + + +def _reached[T](results: list[T], step: str) -> T: + """The result a step produced. A step that refused cannot be acted on.""" + if not results: + raise ShapeError(f"{step} refused, so the steps after it cannot run") + return results[0] + + +class ShapeError(Exception): + """The live answer lacks the shape the scenario is named for.""" + + +def require(condition: bool, message: str) -> None: + if not condition: + raise ShapeError(message) + + +@dataclass(frozen=True, slots=True) +class Minted: + """The operation a mint started or a resume read: its resource, the + headers that came with it, the build request a failed operation posts + again (None for a resumed one), the spec the client holds, and the + rendering it downloads.""" + + resource: dict[str, Any] + headers: dict[str, str] + request: dict[str, Any] | None + spec: Spec | None + rendering: dict[str, Any] + + +def _step_options( + step: dict[str, Any], *, layout: str | None, strict: bool +) -> dict[str, Any]: + if layout is not None: + step["layout"] = layout + if strict: + step["strict"] = True + return step + + +@dataclass +class Session: + """A client over a recorder: each step appends to `call` and `expect`.""" + + recorder: Recorder + actions: Mapping[str, Mapping[str, Any]] + client_codes: Mapping[str, Mapping[str, Any]] + read_shape: Callable[[bytes], tuple[int, list[str]]] = parquet_shape + sleep: Callable[[float], None] = time.sleep + call: list[dict[str, Any]] = field(default_factory=list) + expect: list[dict[str, Any]] = field(default_factory=list) + minted: Minted | None = None + long_builds: list[dict[str, Any]] = field(default_factory=list) + retry_waits: list[float] = field(default_factory=list) + + @property + def gap_kinds(self) -> dict[str, str]: + return gap_kinds(self.actions) + + def _step(self, step: dict[str, Any], run: Callable[[], dict[str, Any]]) -> None: + self.call.append(step) + self.long_builds, self.retry_waits = [], [] + self.recorder.warnings = [] + self.recorder.read_trace = None + try: + outcome = run() + except ClientError as error: + trace = self.recorder.read_trace + outcome = read_from(error, trace).outcome(self.client_codes) + self.expect.append( + with_step_notes( + outcome, + long_builds=self.long_builds, + retry_waits=self.retry_waits, + warnings=self.recorder.warnings, + ) + ) + + def _answered(self, answer: Answer) -> dict[str, Any]: + return answer_outcome(answer, self.gap_kinds) + + def _retried( + self, request: dict[str, Any], send: Callable[[], Response] + ) -> Response: + """Sends `request` through `send`, and again after each refusal + `may_retry` allows, waiting `retry_wait` before each retry.""" + response = send() + answers = [_read(response)] + while may_retry(request, answers): + wait = retry_wait(response.headers, len(answers) - 1) + self.retry_waits.append(wait) + self.sleep(wait) + response = send() + answers.append(_read(response)) + return response + + def _api(self, method: str, path: str, json_body: Any = None) -> Response: + """A request under the base URL, retried as a client retries it.""" + request: dict[str, Any] = {"method": method, "path": path} + if json_body is not None: + request["json"] = json_body + return self._retried( + request, lambda: self.recorder.api(method, path, json_body) + ) + + def _resolve(self, input_: dict[str, Any]) -> Answer: + response = self._api("POST", "/search/resolve", search_body(input_)) + answer = answer_from_body(self._acted(response)) + return replace(answer, trace_id=self.recorder.read_trace) + + def search(self, question: str) -> Answer: + answers: list[Answer] = [] + + def run() -> dict[str, Any]: + answers.append(self._resolve({"kind": "raw_text", "query": question})) + return self._answered(answers[0]) + + self._step({"op": "search", "question": question}, run) + return _reached(answers, "the search") + + def choose( + self, answer: Answer, option: int | str, *, part: int | str | None = None + ) -> Answer | None: + """Settles a part by the rules `choice_for` and `choice_input` state, + posting the choice to Search, and returns the answer Search gives, or + None when the choice refused.""" + step: dict[str, Any] = {"op": "choose"} + if part is not None: + step["part"] = part + step["option"] = option + answers: list[Answer] = [] + + def run() -> dict[str, Any]: + try: + choice = choice_for(answer, self.gap_kinds, part, option) + posts = choice_input(answer, choice) + except ClientError as error: + raise read_from(error, answer.trace_id) from None + answers.append(self._resolve(posts)) + return self._answered(answers[0]) + + self._step(step, run) + return answers[0] if answers else None + + def fetch_answer( + self, + answer: Answer, + *, + partial: bool = False, + strict: bool = False, + layout: str | None = None, + ) -> None: + """Builds the answer's readings. A declined or catalogue answer, a gap + outside a partial fetch, a partial fetch with no reading, a strict + fetch whose readings depart from the question, and the frame layout + with several readings each raise before any request.""" + step: dict[str, Any] = {"op": "fetch"} + if partial: + step["partial"] = True + + def run() -> dict[str, Any]: + if answer.body["kind"] != "resolution": + raise read_from(ClientError("answer_declined"), answer.trace_id) + gaps = answer_gaps(answer, self.gap_kinds) + readings = _members(answer) + if gaps and (not partial or not readings): + raise read_from(ClientError("answer_incomplete"), answer.trace_id) + warns = search_warns(answer) + if warns and strict: + raise read_from( + ClientError(search_warning_code(answer), error="SearchWarning"), + answer.trace_id, + ) + rendering = rendering_for(layout) + if "layout" in rendering and len(readings) > 1: + raise ClientError("invalid_argument") + members = [ + self.build(parts, spec, None, rendering, strict=strict) + for parts, spec in readings + ] + return dataset_outcome(members, missing=gaps, search_warning=warns) + + self._step(_step_options(step, layout=layout, strict=strict), run) + + def fetch_spec( + self, + spec: Spec, + *, + window: str | tuple[int, int] | None = None, + entities: Mapping[str, Sequence[str] | None] | None = None, + facets: Mapping[str, str] | None = None, + layout: str | None = None, + strict: bool = False, + ) -> list[Member]: + """Builds `spec` narrowed by `window`, `entities` and `facets`. A + role in `entities` replaces the spec's binding of it, or drops it + when null.""" + step: dict[str, Any] = {"op": "fetch", "spec": spec.step()} + if window is not None: + step["window"] = list(window) if isinstance(window, tuple) else window + if entities is not None: + step["entities"] = { + role: None if refs is None else list(refs) + for role, refs in entities.items() + } + if facets is not None: + step["facets"] = dict(facets) + scope = posted_scope(step) + built: list[Member] = [] + + def run() -> dict[str, Any]: + rendering = rendering_for(layout) + built.append(self.build([], spec, scope, rendering, strict=strict)) + return dataset_outcome(built) + + self._step(_step_options(step, layout=layout, strict=strict), run) + return built + + def fetch_ref(self, ref: dict[str, Any]) -> None: + """The exact versions a ref names, through the lookup order.""" + + def run() -> dict[str, Any]: + return dataset_outcome([self._stored(member) for member in ref["members"]]) + + self._step({"op": "fetch", "ref": ref}, run) + + def newest_version(self, spec: Spec) -> str | None: + """The newest stored version of `spec`, from the versions route.""" + found: list[str | None] = [] + + def run() -> dict[str, Any]: + found.append(self._newest(spec.spec_id)) + return {"newest_version": {"content_version": found[0]}} + + self._step({"op": "newest_version", "spec": spec.step()}, run) + return found[0] if found else None + + def mint(self, spec: Spec, *, layout: str | None = None) -> str: + operation: list[str] = [] + + def run() -> dict[str, Any]: + rendering = rendering_for(layout) + body = _build_body(spec, None, rendering) + response = self._api("POST", "/datasets", body) + resource = self._acted(response) + require( + response.status == 202, f"the build answered {response.status}, not 202" + ) + self.minted = Minted(resource, response.headers, body, spec, rendering) + operation.append(resource["operation"]["operation_id"]) + return _operation_outcome(resource) + + self._step( + _step_options( + {"op": "mint", "spec": spec.step()}, layout=layout, strict=False + ), + run, + ) + return _reached(operation, "the mint") + + def resume(self, operation_id: str, *, layout: str | None = None) -> None: + """Reads a build another process started, by its operation id.""" + + def run() -> dict[str, Any]: + path = POLL_PATH.format(operation_id=operation_id) + response = self._api("GET", path) + resource = self._acted(response) + self.minted = Minted( + resource, response.headers, None, None, rendering_for(layout) + ) + return _operation_outcome(resource) + + step = {"op": "operation", "operation_id": operation_id} + self._step(_step_options(step, layout=layout, strict=False), run) + + def result(self) -> None: + """Waits for the operation the last mint or operation step holds.""" + if self.minted is None: + raise ValueError("result follows mint or operation") + minted = self.minted + + def run() -> dict[str, Any]: + manifest = self._wait(minted.resource, minted.headers, minted.request) + member = self._member([], minted.spec, manifest, minted.rendering, False) + return dataset_outcome([member]) + + self._step({"op": "result"}, run) + + # -- building -- + + def build( + self, + parts: list[str], + spec: Spec, + scope: dict[str, Any] | None, + rendering: dict[str, Any], + *, + strict: bool = False, + ) -> Member: + """Builds one member: the build, the sentence when the client lacks it, + then the file.""" + manifest = self._built(_build_body(spec, scope, rendering)) + return self._member(parts, spec, manifest, rendering, strict) + + def _built(self, body: dict[str, Any]) -> dict[str, Any]: + """The manifest a build answers, through a long build on a 202.""" + response = self._api("POST", "/datasets", body) + reply = self._acted(response) + if response.status != 202: + return reply + return self._wait(reply, response.headers, body) + + def _member( + self, + parts: list[str], + spec: Spec | None, + manifest: dict[str, Any], + rendering: dict[str, Any], + strict: bool, + ) -> Member: + if strict and (warning := data_warning(manifest)) is not None: + raise warning + artifact = pick_artifact(manifest, rendering) + if artifact is None: + raise ClientError("contract_violation") + route = artifact_route(self.recorder.base_url, artifact["url"]) + definition = manifest["definition"] + sentence = None if spec is None else spec.sentence + if spec is None or definition["spec_id"] != spec.spec_id or sentence is None: + held = None if spec is None else spec.step() + sentence = self._identity_sentence(parts, definition, held) + digest = artifact["artifact_digest"] + rows, columns = self.read_shape(self._download(route, digest)) + return Member( + parts, + definition, + manifest["content_version"], + sentence, + digest, + rows, + columns, + dict(rendering), + ) + + def _identity_sentence( + self, + parts: list[str], + definition: dict[str, Any], + held: dict[str, Any] | None, + ) -> str: + entry = sentence_entry(parts, definition, held) + answer = self._resolve({"kind": "dataset_resubmit", "entries": [entry]}) + return resubmitted_sentence(answer, definition["spec_id"]) + + def _download(self, target: str, digest: str, *, origin: bool = True) -> bytes: + """A file through its files route, named by an `origin_path`, as + `artifact_route` places an artifact's url, or by a path under the base + URL. A 302's location is fetched once, where `download_target` places + it, a local app's blob URL on the API's origin standing for the + storage URL a deployment signs. A 200 holds the file. Any other + success raises ContractError `unexpected_response`. A fetch that + answers with a status other than 200, or returns bytes of another + digest, asks the route once more.""" + base_url = self.recorder.base_url + if origin: + route_url = _origin(base_url) + target + request = {"method": "GET", "origin_path": target} + else: + route_url = base_url.rstrip("/") + target + request = {"method": "GET", "path": target} + failure = ClientError("download_failed") + for _ in range(2): + files = self._retried( + request, + lambda: ( + self.recorder.origin("GET", target) + if origin + else self.recorder.api("GET", target) + ), + ) + self._raise_problem(files) + if files.status == FILES_ROUTE_FILE: + data = files + elif files.status == FILES_ROUTE_REDIRECT: + location = files.headers["location"] + kind, at = download_target(base_url, route_url, location) + if kind == "origin_path" and at.startswith(LOCAL_BLOB_PREFIX): + kind = "url" + data = ( + self.recorder.external(urljoin(route_url, location)) + if kind == "url" + else self.recorder.origin("GET", at) + ) + if data.status != SIGNED_FETCH_STATUS: + failure = ClientError("download_failed") + continue + else: + raise ClientError("unexpected_response") + if digest_of(data.body) == digest: + return data.body + failure = ClientError("digest_mismatch") + raise failure + + def _wait( + self, + resource: dict[str, Any], + headers: Mapping[str, str], + request: dict[str, Any] | None, + ) -> dict[str, Any]: + """Polls as `LongBuild` rules, sleeping each wait, for at most 30 + minutes.""" + build = LongBuild(resource, headers, request, self.actions) + self.long_builds.append(build.entry) + deadline = time.monotonic() + 1800 + while build.result is None: + if time.monotonic() >= deadline: + raise SystemExit(f"{build.entry['operation_id']} ran past 30 minutes") + self.sleep(build.next_wait()) + path = POLL_PATH.format(operation_id=build.entry["operation_id"]) + response = self.recorder.api("GET", path) + if build.polled(response.status, response.headers, _answered(response)): + again = self._api("POST", "/datasets", request) + build.reposted(again.status, again.headers, _answered(again)) + return build.result + + # -- stored versions -- + + def _stored(self, member: dict[str, Any]) -> Member: + """One version a ref names, through the lookup order + `validate_client_contract.stored_version` states.""" + spec = member["spec"] + spec_id, version = spec["spec_id"], member["content_version"] + rendering = member["artifact"]["rendering"] + held = Spec(spec_id, spec["definition"], member["sentence"]) + + def stored_file( + manifest: dict[str, Any], + ) -> tuple[Member | None, ClientError | None]: + data, refusal = self._stored_file(member, manifest) + if data is None: + return None, refusal + rows, columns = self.read_shape(data) + stored = Member( + member["parts"], + spec["definition"], + version, + member["sentence"], + member["artifact"]["digest"], + rows, + columns, + dict(rendering), + ) + return stored, None + + return stored_version( + member, + self.client_codes, + snapshot=lambda: self._acted( + self._api("GET", f"/datasets/{spec_id}/{version}") + ), + stored_file=stored_file, + rebuild=lambda: self._built(_build_body(held, None, rendering)), + rebuilt=lambda manifest: self._member( + member["parts"], held, manifest, rendering, False + ), + newest=lambda: self._newest(spec_id), + ) + + def _stored_file( + self, member: dict[str, Any], manifest: dict[str, Any] + ) -> tuple[bytes | None, ClientError | None]: + digest = member["artifact"]["digest"] + refusal = None + artifact = next( + (a for a in manifest["artifacts"] if a["artifact_digest"] == digest), None + ) + if artifact is not None: + try: + route = artifact_route(self.recorder.base_url, artifact["url"]) + return self._download(route, digest), None + except ClientError as error: + if error.code not in FILE_GONE: + raise + refusal = error + path = selector_path( + member["spec"]["spec_id"], + member["content_version"], + member["artifact"]["rendering"], + ) + try: + return self._download(path, digest, origin=False), None + except ClientError as error: + if error.code == "digest_mismatch": + return None, refusal + if error.code in FILE_GONE: + return None, refusal if refusal is not None else error + raise + + def _newest(self, spec_id: str) -> str | None: + try: + body = self._acted(self._api("GET", versions_path(spec_id))) + except ClientError as error: + if error.error_class(self.client_codes) in NO_VERSIONS: + return None + raise + return newest_listed(body) + + def _acted(self, response: Response) -> Any: + """The JSON body of a success. A refusal raises its error, and a + success without a JSON body raises ContractError + `unexpected_response`.""" + self._raise_problem(response) + return _answered(response) + + def _raise_problem(self, response: Response) -> None: + if response.status < 400: + return + raise refusal_error( + response.status, + problem_body(_read(response)), + self.actions, + response.headers, + ) + + +def _read(response: Response) -> dict[str, Any]: + """A response as a record holds it: its status, headers, and its JSON + body when it has one.""" + read: dict[str, Any] = {"status": response.status, "headers": response.headers} + if response.body and _is_json(response.headers.get("content-type", "")): + read["json"] = response.json() + return read + + +def _answered(response: Response) -> Any: + """A success's JSON body, which a success without one lacks, raising + ContractError `unexpected_response`, or a refusal's problem body.""" + read = _read(response) + if response.status >= 400: + return problem_body(read) + if "json" not in read: + raise ClientError("unexpected_response") + return read["json"] + + +def _operation_outcome(resource: dict[str, Any]) -> dict[str, Any]: + operation = resource["operation"] + return {"operation": {k: operation[k] for k in ("operation_id", "status")}} + + +def _build_body( + spec: Spec, scope: dict[str, Any] | None, rendering: Mapping[str, Any] +) -> dict[str, Any]: + held = {"spec_id": spec.spec_id, "definition": spec.definition} + return build_body(held, scope, rendering) + + +# --- scenarios -------------------------------------------------------------- + +DEFINITE = "ODA disbursements from Germany to Nigeria for basic health care" +CANDIDATES = "GNI of Germany from 2015 to 2022" +MIXED = "debt service of Kenya and the price of tea in Kenya" +FOLDED = "ODA disbursements for health and for education from Germany to Kenya, and GDP of Kenya" +PLACE = "ODA disbursements from Germany to Congo" +TWO_PLACES = "Kenya's GDP, and ODA disbursements from Germany to Congo" +DECLINED = "should donors give more aid to Kenya?" +CATALOGUE = "what data do you have?" +TOP5 = "top 5 donors to Ethiopia in 2022" +PLACE_LABELS = ["Congo [DRC]", "Congo [Republic]"] +CANDIDATES_BESIDE_GROUP = ( + "GNI of Germany from 2015 to 2022, and ODA disbursements from Germany to " + "sub-Saharan Africa" +) +TWO_CANDIDATES = "GNI of Germany and tax revenue of Kenya from 2015 to 2022" +CANDIDATES_BESIDE_UNRESTATED = "GNI of Germany and debt of Kenya from 2015 to 2022" +GROUP_DEFINITE = "GDP of the least developed countries" +# A definite part whose places are a named group, beside a part whose +# direction the question leaves open, which offers one option per direction. +GROUP_BESIDE_OPTIONS = "GDP of sub-Saharan Africa, and debt of Kenya" +GROUPED_FLOW = "Germany's ODA to the least developed countries" +CANDIDATES_BESIDE_ASSUMED = "GNI of Germany and aid flows to Kenya" +# Two specs just above the 100,000-row sync budget, one for the mint and one +# for the operation another process started: a version the server has built +# answers inline, so each long build needs a spec the server has not built. +ASYNC = "ODA received by every recipient country from every provider (DAC2a) from 2018 to 2024" +ASYNC_RESUMED = "ODA received by every recipient country from every provider (DAC2a) from 2017 to 2024" +NARROW_WINDOW = (2020, 2023) +REBOUND_ORIGIN = "country/FRA" +SYNC_ROWS = 100_000 + + +@dataclass +class Context: + """Prerequisites a scenario needs but does not record, fetched once.""" + + base_url: str + transport: Transport + actions: Mapping[str, Mapping[str, Any]] + client_codes: Mapping[str, Mapping[str, Any]] + read_shape: Callable[[bytes], tuple[int, list[str]]] = parquet_shape + _cache: dict[str, Any] = field(default_factory=dict) + + def session(self, name: str, **recorder: Any) -> Session: + return Session( + Recorder(name, self.base_url, self.transport, **recorder), + self.actions, + self.client_codes, + read_shape=self.read_shape, + ) + + def raised( + self, code: str, response: Mapping[str, Any] | None = None + ) -> dict[str, Any]: + """The outcome of an error the client raises with `code`, on reading + the API response `response` when one is given, or else before any + response.""" + error = ClientError(code) + if response is not None: + body, headers = response.get("json"), response.get("headers", {}) + read_from(error, trace_id(body, headers)) + return error.outcome(self.client_codes) + + def definite_answer(self, question: str) -> Answer: + if question not in self._cache: + answer = self.session("prerequisite").search(question) + require(answer.status == "definite", f"{question!r} is definite") + self._cache[question] = answer + return self._cache[question] + + def definite_spec(self, question: str) -> Spec: + (part,) = self.definite_answer(question).parts + return _part_spec(part["spec"]) + + def narrowed_spec(self) -> Spec: + """The definite spec narrowed to 2020 to 2023, with the sentence its build has.""" + if "narrowed" not in self._cache: + member = self.session("prerequisite").fetch_spec( + self.definite_spec(DEFINITE), window=NARROW_WINDOW + )[0] + self._cache["narrowed"] = Spec( + member.spec_id, member.definition, member.sentence + ) + return self._cache["narrowed"] + + def definite_ref(self) -> dict[str, Any]: + if "ref" not in self._cache: + answer = self.definite_answer(DEFINITE) + session = self.session("prerequisite") + ((parts, spec),) = _members(answer) + member = session.build(parts, spec, None, dict(RENDERING)) + self._cache["ref"] = {"format_version": 1, "members": [member.ref()]} + return self._cache["ref"] + + def async_spec(self, question: str = ASYNC) -> Spec: + """The spec `question` answers, whose estimate is just above the sync + budget.""" + (part,) = self.definite_answer(question).parts + rows = part["spec"]["resolved"].get("download", {}).get("rows") or 0 + require( + SYNC_ROWS < rows < 2 * SYNC_ROWS, + f"{rows} rows is just above the sync budget", + ) + return _part_spec(part["spec"]) + + def running_operation(self) -> str: + """The id of a long build another process started.""" + if "operation" not in self._cache: + self._cache["operation"] = self.session("prerequisite").mint( + self.async_spec(ASYNC_RESUMED) + ) + return self._cache["operation"] + + +@dataclass(frozen=True) +class Recorded: + name: str + description: str + run: Callable[[Session, Context], None] + + +def _answer_definite_fetch(s: Session, ctx: Context) -> None: + answer = s.search(DEFINITE) + require(answer.status == "definite" and len(answer.parts) == 1, "one definite part") + s.fetch_answer(answer) + + +def _answer_candidates(s: Session, ctx: Context) -> None: + answer = s.search(CANDIDATES) + require( + answer.status == "candidates" and len(answer.parts) == 1, "one candidates part" + ) + picked = answer.parts[0]["candidates"]["specs"][0]["spec_id"] + chosen = s.choose(answer, 0) + require( + chosen is not None + and _statuses(chosen) == ["definite"] + and chosen.parts[0]["spec"]["spec_id"] == picked, + "Search answers the picked reading definite", + ) + if chosen is not None: + s.fetch_answer(chosen) + + +def _answer_mixed_raises(s: Session, ctx: Context) -> None: + answer = s.search(MIXED) + require(answer.status == "mixed", "a mixed answer") + require( + [p["status"] for p in answer.parts] == ["definite", "no_data"], + "definite, no_data", + ) + s.fetch_answer(answer) + + +def _answer_mixed_partial(s: Session, ctx: Context) -> None: + answer = s.search(MIXED) + require( + [p["status"] for p in answer.parts] == ["definite", "no_data"], + "definite, no_data", + ) + s.fetch_answer(answer, partial=True) + + +def _answer_folded(s: Session, ctx: Context) -> None: + answer = s.search(FOLDED) + ids = [p.get("spec", {}).get("spec_id") for p in answer.parts] + require(answer.status == "definite" and len(ids) == 3, "three definite parts") + require(ids[0] == ids[1] != ids[2], "the first two parts fold into one spec") + require( + any(w["code"] == "binding_folded" for w in answer.parts[1]["warnings"]), + "the second part carries binding_folded", + ) + s.fetch_answer(answer) + + +def _fetch_spec_narrowed(s: Session, ctx: Context) -> None: + spec = ctx.definite_spec(DEFINITE) + (member,) = s.fetch_spec(spec, window=NARROW_WINDOW) + require(member.spec_id != spec.spec_id, "the window gives a new spec_id") + require("2020 to 2023" in member.sentence, "the sentence names the window") + + +def _fetch_spec_entities( + rebinds: Mapping[str, list[str] | None], +) -> Callable[[Session, Context], None]: + """Fetches the definite spec with `rebinds` as `entities`, and checks the + build binds the entities the client posts.""" + + def run(s: Session, ctx: Context) -> None: + spec = ctx.definite_spec(DEFINITE) + (member,) = s.fetch_spec(spec, entities=rebinds) + posted = s.recorder.exchanges[0]["request"]["json"]["input"]["scope"] + bound = member.definition["identity"]["entities"] + require(member.spec_id != spec.spec_id, "the entities give a new spec_id") + require(bound == posted["entities"], "the build binds the posted entities") + + return run + + +def _fetch_spec_grouped( + *, + window: tuple[int, int] | None = None, + entities: Mapping[str, list[str] | None] | None = None, +) -> Callable[[Session, Context], None]: + """Fetches the GROUPED_FLOW spec, whose destination is a named group, with + the narrowing given, and checks the built sentence names the group.""" + + def run(s: Session, ctx: Context) -> None: + spec = ctx.definite_spec(GROUPED_FLOW) + groups = spec.entity_groups or {} + require("destination" in groups, "the destination is a named group") + (member,) = s.fetch_spec(spec, window=window, entities=entities) + require(member.spec_id != spec.spec_id, "the narrowing gives a new spec_id") + require( + groups["destination"]["label"] in member.sentence, + "the built sentence names the destination's group", + ) + + return run + + +def _fetch_spec_known_sentence(s: Session, ctx: Context) -> None: + spec = ctx.narrowed_spec() + (member,) = s.fetch_spec(spec) + require(member.spec_id == spec.spec_id, "the build keeps the spec_id") + + +def _fetch_spec_request_invalid(s: Session, ctx: Context) -> None: + s.fetch_spec(ctx.definite_spec(DEFINITE), facets={"colour": "blue"}) + require( + s.expect[-1].get("error", {}).get("code") == "request_invalid", + "request_invalid", + ) + + +def _fetch_ref(s: Session, ctx: Context) -> None: + s.fetch_ref(ctx.definite_ref()) + require("dataset" in s.expect[-1], "the ref's version is fetched") + + +def _fetch_ref_unknown_version(s: Session, ctx: Context) -> None: + ref = copy.deepcopy(ctx.definite_ref()) + ref["members"][0]["content_version"] = "cv_" + "0" * 32 + s.fetch_ref(ref) + require( + s.expect[-1].get("error", {}).get("code") == "snapshot_not_found", + "snapshot_not_found", + ) + + +def _mint_async(s: Session, ctx: Context) -> None: + s.mint(ctx.async_spec(ASYNC)) + s.result() + + +def _operation_resume(s: Session, ctx: Context) -> None: + s.resume(ctx.running_operation()) + s.result() + + +def _fetch_spec_frame(s: Session, ctx: Context) -> None: + (member,) = s.fetch_spec(ctx.definite_spec(DEFINITE), layout="frame") + require(member.rendering.get("layout") == "frame", "the frame artifact is fetched") + + +def _answer_kind(question: str, kind: str) -> Callable[[Session, Context], None]: + def run(s: Session, ctx: Context) -> None: + answer = s.search(question) + require(answer.body["kind"] == kind, f"a {kind} answer") + s.fetch_answer(answer) + + return run + + +def _place_answer(s: Session, question: str, parts: int) -> Answer: + """The answer to `question`: `parts` entity_ambiguous parts, each with an + option per Congo.""" + answer = s.search(question) + require( + [p.get("no_data", {}).get("reason") for p in answer.parts] + == ["entity_ambiguous"] * parts, + f"{parts} entity_ambiguous part(s)", + ) + require( + all( + [o["label"] for o in p["no_data"].get("options", [])] == PLACE_LABELS + for p in answer.parts + ), + f"each part offers {PLACE_LABELS}", + ) + return answer + + +def _search_place(question: str, parts: int) -> Callable[[Session, Context], None]: + def run(s: Session, ctx: Context) -> None: + _place_answer(s, question, parts) + + return run + + +def _choose_place( + question: str, parts: int, part: int | str | None +) -> Callable[[Session, Context], None]: + """Chooses "Congo [DRC]" on `part` of the answer to `question`, and checks + the chosen part answers definite.""" + + def run(s: Session, ctx: Context) -> None: + answer = _place_answer(s, question, parts) + chosen = s.choose(answer, PLACE_LABELS[0], part=part) + index = part if isinstance(part, int) else 0 + require( + chosen is not None and _statuses(chosen)[index] == "definite", + "the chosen part answers definite", + ) + + return run + + +def _statuses(answer: Answer) -> list[str]: + return [part.get("status") for part in answer.parts] + + +def _search_warning_top5(s: Session, ctx: Context) -> None: + answer = s.search(TOP5) + require(_statuses(answer) == ["definite"], "one definite part") + operations = answer.parts[0].get("operations") or [] + require(any(o.get("verb") == "rank" for o in operations), "the rank is not done") + s.fetch_answer(answer, strict=True) + s.fetch_answer(answer) + + +def _choose_candidate_two_parts(s: Session, ctx: Context) -> None: + answer = s.search(CANDIDATES_BESIDE_GROUP) + require(_statuses(answer) == ["candidates", "definite"], "candidates, definite") + require( + bool(answer.parts[1]["spec"]["resolved"].get("entity_groups")), + "the definite part names an entity group", + ) + chosen = s.choose(answer, 0, part=0) + require( + chosen is not None and _statuses(chosen) == ["definite", "definite"], + "the choice answers both parts definite", + ) + if chosen is not None: + s.fetch_answer(chosen) + + +def _resubmit_candidates_sibling(s: Session, ctx: Context) -> None: + answer = s.search(TWO_CANDIDATES) + require(_statuses(answer) == ["candidates", "candidates"], "two candidates parts") + chosen = s.choose(answer, 0, part=0) + require( + chosen is not None and _statuses(chosen) == ["definite", "candidates"], + "the choice settles part 0 and leaves part 1's candidates", + ) + if chosen is not None: + before = [c["spec_id"] for c in answer.parts[1]["candidates"]["specs"]] + after = [c["spec_id"] for c in chosen.parts[1]["candidates"]["specs"]] + require(before == after, "the candidates keep their posted order") + + +def _choose_candidate_echoes_assumptions(s: Session, ctx: Context) -> None: + answer = s.search(CANDIDATES_BESIDE_ASSUMED) + require(_statuses(answer) == ["candidates", "definite"], "candidates, definite") + stated = answer.parts[1].get("assumptions") + require(bool(stated), "the definite part states assumptions") + require( + "reading_assumptions" in answer.parts[0], + "the candidates part states its readings' assumptions", + ) + chosen = s.choose(answer, 0, part=0) + require( + chosen is not None and _statuses(chosen) == ["definite", "definite"], + "the choice answers both parts definite", + ) + if chosen is not None: + require( + chosen.parts[1].get("assumptions") == stated, + "the rebuilt definite part states the echoed assumptions", + ) + + +def _choose_option_beside_definite(s: Session, ctx: Context) -> None: + answer = s.search(GROUP_BESIDE_OPTIONS) + require(_statuses(answer) == ["definite", "no_data"], "definite, no_data") + require( + bool(answer.parts[0]["spec"]["resolved"].get("entity_groups")), + "the definite part names an entity group", + ) + require( + bool(answer.parts[1]["no_data"].get("options")), "the no_data part has options" + ) + chosen = s.choose(answer, 0, part=1) + require( + chosen is not None + and _statuses(chosen)[0] == "definite" + and _statuses(chosen)[1] in ("definite", "candidates"), + "part 0 stays definite and part 1 answers in the chosen direction", + ) + + +def _fetch_ref_newest_version(s: Session, ctx: Context) -> None: + (member,) = ctx.definite_ref()["members"] + spec = ctx.definite_spec(DEFINITE) + newest = s.newest_version(spec) + require(newest == member["content_version"], "the stored version is the newest") + + +def _resubmit_placeholder(s: Session, ctx: Context) -> None: + answer = s.search(CANDIDATES_BESIDE_UNRESTATED) + require(_statuses(answer) == ["candidates", "no_data"], "candidates, no_data") + require("restatement" not in answer.parts[1], "part 1 has no restatement") + chosen = s.choose(answer, 0, part=0) + require( + chosen is not None and _statuses(chosen)[0] == "definite", + "the choice settles part 0", + ) + + +RECORDED = ( + Recorded( + "answer-definite-fetch", + "A question with one reading answers definite, and fetching the answer builds the " + "part's spec as bare Parquet, follows the files route's redirect with a bare request, " + "and returns one member whose parts hold the part's variable text and whose sentence " + "is the part's spec.resolved.rendered_sentence, with no Search call after the first.", + _answer_definite_fetch, + ), + Recorded( + "answer-candidates-choose-fetch", + "A question with three readings answers one candidates part, a choice gap with three " + "options. Choosing option 0 posts that candidate's identity to Search as the one " + "dataset_resubmit identity entry, echoing the part's reading_assumptions under its " + "spec_id as assumptions. Search answers that reading definite with its own sentence, " + "and fetching the answer builds that candidate's spec.", + _answer_candidates, + ), + Recorded( + "answer-mixed-fetch-raises", + "A question with one answered part and one part Search cannot read answers mixed, " + "incomplete, with a not_understood gap on part 1. Fetching it raises " + "IncompleteAnswerError before any build.", + _answer_mixed_raises, + ), + Recorded( + "answer-mixed-fetch-partial", + "Fetching the mixed answer with partial=True builds only the answered part and returns " + "a dataset that is not complete, with part 1's not_understood gap in missing.", + _answer_mixed_partial, + ), + Recorded( + "answer-several-readings-folded", + "A question with three definite parts, the first two folded into one spec_id " + "(binding_folded), builds each distinct spec_id once, in part order, each through build, " + "files and download before the next. The dataset stacks two members, the first answering " + "both folded parts, into one table with a part column first and each member's columns in " + "member order.", + _answer_folded, + ), + Recorded( + "fetch-spec-narrowed", + "Fetching a spec with window=(2020, 2023) posts the window as input.scope, and the build " + "answers a new spec_id. The client stores the built spec_id and content_version, takes " + "the sentence from Search by posting the built definition's identity as a dataset_resubmit " + 'identity entry (variable_text "dataset" for a spec no answer part names), checks the ' + "answer's spec_id equals the built one, then downloads the file.", + _fetch_spec_narrowed, + ), + Recorded( + "fetch-spec-entity-rebound", + "Fetching a two-role spec with entities naming only origin posts input.scope.entities " + "with origin replaced and destination kept from the spec's definition, because the " + "server's scope.entities replaces the spec's whole entity binding. The build answers a " + "new spec_id bound to both roles.", + _fetch_spec_entities({"origin": [REBOUND_ORIGIN]}), + ), + Recorded( + "fetch-spec-entity-dropped", + "Fetching a two-role spec with entities binding origin to null posts " + "input.scope.entities with origin dropped and destination kept, and the build answers " + "a new spec_id bound to destination alone.", + _fetch_spec_entities({"origin": None}), + ), + Recorded( + "fetch-spec-group-narrowed", + "Fetching a spec whose destination is the least developed countries group with " + "window=(2020, 2023) answers a new spec_id. The identity entry that asks Search for its " + "sentence carries the spec's entity_groups whole, since a window leaves every role's " + "binding as it was, and the sentence names the group.", + _fetch_spec_grouped(window=NARROW_WINDOW), + ), + Recorded( + "fetch-spec-group-origin-rebound", + "Fetching a spec of Germany's flows to the least developed countries group with " + "entities naming only origin rebinds origin to France. The identity entry that asks " + "Search for the built sentence carries the destination's group, whose binding the " + "build kept, and the sentence names the group.", + _fetch_spec_grouped(entities={"origin": [REBOUND_ORIGIN]}), + ), + Recorded( + "fetch-spec-known-sentence", + "Fetching a spec whose sentence the client holds builds bare Parquet, follows the files " + "route's redirect with a bare request, and returns one member with that sentence and no " + "Search call.", + _fetch_spec_known_sentence, + ), + Recorded( + "fetch-spec-request-invalid", + "Fetching a spec with a facet the server does not know sends it in input.scope.facets; " + "the build refuses 400 request_invalid, which raises InvalidRequestError.", + _fetch_spec_request_invalid, + ), + Recorded( + "fetch-ref", + "Fetching a ref with the cache off reads the stored version through the snapshot route, " + "then the files route at the artifact url whose digest the ref stores, and returns the " + "ref's member with its stored parts and sentence and no build or Search call.", + _fetch_ref, + ), + Recorded( + "fetch-ref-unknown-version", + "Fetching a ref whose content_version the server never built ends at the snapshot " + "route's 404 snapshot_not_found, which raises NotFoundError with no build: an unknown " + "version is not an expired one.", + _fetch_ref_unknown_version, + ), + Recorded( + "mint-async-build", + "Minting a spec whose estimate is just above the 100,000-row sync budget answers 202 " + "with an operation the client reports as pending. Waiting polls the operation path " + "built from operation_id, sleeping retry_after_ms when the response carries it and " + "backing off from 1 to 8 seconds otherwise, until done; the done manifest's file is " + "then downloaded.", + _mint_async, + ), + Recorded( + "operation-resume", + "Resuming a long build another process started reads its operation by id, and the " + "operation is pending or running. Waiting polls it at the server's pacing until done; " + "the client holds no spec, so it takes the sentence from Search by posting the built " + 'identity with variable_text "dataset", then downloads the file. A resumed build holds ' + "no request, so a failed operation is not posted again.", + _operation_resume, + ), + Recorded( + "fetch-spec-frame-layout", + 'Fetching a spec with layout="frame" posts the frame rendering as the build\'s options ' + "and downloads the manifest's frame artifact, matched on format, bundle and its frame " + "layout, with no Search call.", + _fetch_spec_frame, + ), + Recorded( + "answer-declined", + "A question that asks for analysis answers declined, with no parts and no sentence, " + "and is not complete. Fetching it raises DeclinedError with no request.", + _answer_kind(DECLINED, "declined"), + ), + Recorded( + "answer-catalogue", + "A question about what data exists answers catalogue, with no parts and no sentence, " + "and is not complete. Fetching it raises DeclinedError with no request.", + _answer_kind(CATALOGUE, "catalogue"), + ), + Recorded( + "search-place-ambiguous", + "A question naming a place that matches two countries answers with one no_data part " + "whose entity_ambiguous reason makes a choice gap, with one option per country: each " + "option's data_query pins that country on the ambiguous wording.", + _search_place(PLACE, 1), + ), + Recorded( + "search-two-parts-place-ambiguous", + "A two-part question naming a place that matches two countries answers no_data on both " + "parts, each an entity_ambiguous choice gap with one option per country.", + _search_place(TWO_PLACES, 2), + ), + Recorded( + "choose-place-one-part", + 'Choosing "Congo [DRC]" by label in a one-part answer posts that option\'s data_query ' + "unchanged as the input of a new search, which answers definite.", + _choose_place(PLACE, 1, None), + ), + Recorded( + "choose-part-by-mention", + 'Naming the part by "Congo", a word its options mention, and the option by label posts ' + "that option's data_query, as naming the part by index does.", + _choose_place(PLACE, 1, "Congo"), + ), + Recorded( + "choose-place-two-parts", + 'Choosing "Congo [DRC]" on part 1 of a two-part answer posts dataset_resubmit with one ' + "entry per part in part order: the chosen option's data_query part as a parsed entry, " + "and part 0, still a refusal, as a parsed entry of its restatement. Part 1 answers " + "definite.", + _choose_place(TWO_PLACES, 2, 1), + ), + Recorded( + "search-warning-top5", + "A question asking for a ranking answers one definite part that does not run the rank, " + "with a departure and two warn-severity warnings. A strict fetch raises SearchWarning " + "before any build; a fetch that is not strict builds the dataset and issues one " + "SearchWarning for all of them.", + _search_warning_top5, + ), + Recorded( + "choose-candidate-two-parts", + "Choosing candidate 0 on the candidates part of a two-part answer posts dataset_resubmit " + "with one entry per part in part order: the chosen candidate's identity, and the definite " + "part's identity with its entity_groups. Both parts answer definite, and the fetch stacks " + "two members with each member's parts as its part column value.", + _choose_candidate_two_parts, + ), + Recorded( + "resubmit-candidates-sibling", + "Choosing candidate 0 on part 0 of an answer with two candidates parts posts part 1 as a " + "candidates entry: its candidate set in the server's order, each with its identity, and " + "its ordering and truncated echoed. Part 1 answers candidates again in the same order.", + _resubmit_candidates_sibling, + ), + Recorded( + "choose-option-beside-definite", + "Choosing option 0 on part 1, a no_data part whose direction the question leaves " + "open, beside a definite part whose places are a named group posts dataset_resubmit " + "with the definite part's identity, entity_groups and assumptions as an identity " + "entry, and the chosen option's data_query part as a parsed entry. Part 0 answers " + "definite again, and part 1 answers the debt read in the chosen direction.", + _choose_option_beside_definite, + ), + Recorded( + "fetch-ref-newest-version", + "The newest stored version of a spec is the one the versions route lists first, so " + "the client asks for it alone with limit=1. The route needs no key.", + _fetch_ref_newest_version, + ), + Recorded( + "choose-candidate-echoes-assumptions", + "Choosing candidate 0 on part 0 beside a definite part that states assumptions posts " + "each identity entry with its reading's assumptions echoed: the chosen candidate's " + "reading_assumptions entry, [] here, and the definite part's own assumptions. The " + "rebuilt definite part states the same assumptions; an entry with no assumptions " + "would be read as a fresh request.", + _choose_candidate_echoes_assumptions, + ), + Recorded( + "resubmit-placeholder-without-restatement", + "Choosing candidate 0 on part 0 posts part 1, a no_data part with no restatement, as a " + "placeholder entry with its variable_text, status and reason.", + _resubmit_placeholder, + ), +) + + +# --- synthetic scenarios ---------------------------------------------------- + + +def _problem( + code: str, status: int, title: str, detail: str, *, retryable: bool +) -> dict[str, Any]: + return { + "type": f"/codes/{code}", + "title": title, + "status": status, + "detail": detail, + "code": code, + "trace_id": "0" * 32, + "capability_version": "synthetic", + "retryable": retryable, + } + + +def _refusal( + request: dict[str, Any], + status: int, + body: dict[str, Any], + headers: Mapping[str, str] | None = None, +) -> dict[str, Any]: + """An exchange answering `request` with a refusal: a problem document, or + the website proxy's own `{error, retry, detail}` JSON.""" + media = "application/json" if "error" in body else "application/problem+json" + return { + "request": copy.deepcopy(request), + "response": { + "status": status, + "headers": {"content-type": media, **(headers or {})}, + "json": body, + }, + } + + +_PROXY_RATE_LIMITED = { + "error": "rate_limited", + "retry": "retry_after_delay", + "detail": "Too many requests from this address. Try again shortly.", +} +_PROXY_UNAVAILABLE = { + "error": "transient_unavailable", + "retry": "retry_after_delay", + "detail": "The Search API is unreachable.", +} + + +@dataclass(frozen=True) +class Derived: + call: list[dict[str, Any]] + exchanges: list[dict[str, Any]] + expect: list[dict[str, Any]] + bodies: dict[str, bytes] = field(default_factory=dict) + + +@dataclass(frozen=True) +class Synthetic: + """A scenario derived from a recorded one, with no request. Its + derivation runs over a context whose transport refuses every request.""" + + name: str + derived_from: str + edit: str + description: str + derive: Callable[[dict[str, Any], Context], Derived] + + +def _same(parent: dict[str, Any], exchanges: list[dict[str, Any]]) -> Derived: + return Derived( + copy.deepcopy(parent["call"]), exchanges, copy.deepcopy(parent["expect"]) + ) + + +def _waited(outcome: dict[str, Any], *refusals: dict[str, Any]) -> dict[str, Any]: + """`outcome` with the waits before the retries that follow `refusals`, + the refused exchanges of one request in order.""" + waits = [ + retry_wait(refused["response"].get("headers", {}), attempt) + for attempt, refused in enumerate(refusals) + ] + return with_step_notes(outcome, long_builds=(), retry_waits=waits, warnings=()) + + +def _refused_first( + parent: dict[str, Any], index: int, refused: dict[str, Any] +) -> Derived: + """The parent with `refused` answering exchange `index` first, and the + retry's wait in the outcome of the last step, which makes it.""" + exchanges = copy.deepcopy(parent["exchanges"]) + exchanges.insert(index, refused) + expect = copy.deepcopy(parent["expect"]) + expect[-1] = _waited(expect[-1], refused) + return Derived(copy.deepcopy(parent["call"]), exchanges, expect) + + +_BUSY = _problem( + "service_unavailable", + 503, + "Service Unavailable", + "The service is busy.", + retryable=True, +) + + +def _retry_after_503(parent: dict[str, Any], ctx: Context) -> Derived: + first = parent["exchanges"][0] + refused = _refusal(first["request"], 503, _BUSY, {"retry-after": "1"}) + return _refused_first(parent, 0, refused) + + +def _proxy_429(parent: dict[str, Any], ctx: Context) -> Derived: + first = parent["exchanges"][0] + refused = _refusal( + first["request"], 429, dict(_PROXY_RATE_LIMITED), {"retry-after": "2"} + ) + return _refused_first(parent, 0, refused) + + +def _proxy_502(parent: dict[str, Any], ctx: Context) -> Derived: + first = parent["exchanges"][0] + refused = [ + _refusal(first["request"], 502, dict(_PROXY_UNAVAILABLE)) for _ in range(3) + ] + error = refusal_error(502, _PROXY_UNAVAILABLE, ctx.actions).outcome( + ctx.client_codes + ) + return Derived( + copy.deepcopy(parent["call"]), refused, [_waited(error, *refused[:2])] + ) + + +def _build_index(parent: dict[str, Any]) -> int: + return next( + i + for i, e in enumerate(parent["exchanges"]) + if e["request"]["method"] == "POST" and e["request"].get("path") == "/datasets" + ) + + +_TIMEOUT = _problem( + "timeout", + 504, + "Gateway Timeout", + "The build passed its 120 s limit.", + retryable=True, +) +_EXPIRED = _problem( + "artifact_expired", + 410, + "Gone", + "Every listable artifact of this version aged out of the working tier unpinned.", + retryable=False, +) +_NOT_RESOLVABLE = _problem( + "member_not_resolvable", + 422, + "Unprocessable Entity", + "The spec's variable no longer resolves in the graph.", + retryable=False, +) +_CAPABILITY_UNAVAILABLE = _problem( + "capability_unavailable", + 501, + "Not Implemented", + "This deployment does not enable the frame layout.", + retryable=False, +) +_OPERATION_FAILED = _problem( + "operation_failed", + 500, + "Internal Server Error", + "The build's worker stopped before it finished.", + retryable=True, +) +# The content version a rebuild answers when the data moved on. +NEWER_VERSION = "cv_" + "1" * 32 +# The spec_id a ref's rebuild answers in `fetch-ref-expired-rebuild-other-spec`. +REBUILT_SPEC_ID = "spec_" + "2" * 32 + + +def _retry_after_504( + headers: Mapping[str, str] | None = None, +) -> Callable[[dict[str, Any], Context], Derived]: + """A 504 timeout, carrying `headers`, answers the parent's first build.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + index = _build_index(parent) + build = parent["exchanges"][index]["request"] + return _refused_first(parent, index, _refusal(build, 504, _TIMEOUT, headers)) + + return derive + + +def _ends_at_build( + response: Callable[ + [dict[str, Any], Context], tuple[dict[str, Any], dict[str, Any]] + ], +) -> Callable[[dict[str, Any], Context], Derived]: + """The parent's exchanges up to its first build, which `response` turns + into the exchanges the build makes and the outcome the last step reaches.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + index = _build_index(parent) + exchanges = copy.deepcopy(parent["exchanges"][:index]) + made, outcome = response(copy.deepcopy(parent["exchanges"][index]), ctx) + return Derived( + copy.deepcopy(parent["call"]), + [*exchanges, *made], + [*copy.deepcopy(parent["expect"][:-1]), outcome], + ) + + return derive + + +def _cut_off_twice( + build: dict[str, Any], ctx: Context +) -> tuple[list[dict[str, Any]], dict[str, Any]]: + refused = _refusal(build["request"], 504, _TIMEOUT) + error = refusal_error(504, _TIMEOUT, ctx.actions).outcome(ctx.client_codes) + return [refused, copy.deepcopy(refused)], _waited(error, refused) + + +def _cut_off_then_busy( + build: dict[str, Any], ctx: Context +) -> tuple[list[dict[str, Any]], dict[str, Any]]: + """A 504 cut-off, then a 503 on the one post after it, which raises.""" + cut_off = _refusal(build["request"], 504, _TIMEOUT) + busy = _refusal(build["request"], 503, _BUSY) + error = refusal_error(503, _BUSY, ctx.actions).outcome(ctx.client_codes) + return [cut_off, busy], _waited(error, cut_off) + + +def _busy_then_cut_off(parent: dict[str, Any], ctx: Context) -> Derived: + """A 503, then a 504 cut-off, answer the build before the recorded + answer, and the retries' waits go in the outcome.""" + index = _build_index(parent) + build = parent["exchanges"][index]["request"] + refused = [_refusal(build, 503, _BUSY), _refusal(build, 504, _TIMEOUT)] + exchanges = copy.deepcopy(parent["exchanges"]) + exchanges[index:index] = refused + expect = copy.deepcopy(parent["expect"]) + expect[-1] = _waited(expect[-1], *refused) + return Derived(copy.deepcopy(parent["call"]), exchanges, expect) + + +def _not_resolvable( + build: dict[str, Any], ctx: Context +) -> tuple[list[dict[str, Any]], dict[str, Any]]: + error = refusal_error(422, _NOT_RESOLVABLE, ctx.actions).outcome(ctx.client_codes) + return [_refusal(build["request"], 422, _NOT_RESOLVABLE)], error + + +def _capability_unavailable( + build: dict[str, Any], ctx: Context +) -> tuple[list[dict[str, Any]], dict[str, Any]]: + problem = _CAPABILITY_UNAVAILABLE + error = refusal_error(501, problem, ctx.actions).outcome(ctx.client_codes) + return [_refusal(build["request"], 501, problem)], error + + +# The x-dfo-trace-id header of the responses `search-no-json-body` and +# `fetch-spec-strict-warning` raise on, which the errors carry. +READ_TRACE_ID = "3" * 32 + + +def _strict_warning(parent: dict[str, Any], ctx: Context) -> Derived: + """The fetch is strict, and its build's manifest, whose response carries + READ_TRACE_ID, raises its first warning above info.""" + index = _build_index(parent) + exchanges = copy.deepcopy(parent["exchanges"][: index + 1]) + response = exchanges[index]["response"] + response.setdefault("headers", {})["x-dfo-trace-id"] = READ_TRACE_ID + warning = data_warning(response["json"]) + require(warning is not None, "the manifest carries a warning above info") + read_from(warning, trace_id(response["json"], response["headers"])) + call = copy.deepcopy(parent["call"]) + call[-1]["strict"] = True + return Derived( + call, + exchanges, + [*copy.deepcopy(parent["expect"][:-1]), warning.outcome(ctx.client_codes)], + ) + + +def _digest_mismatch(name: str) -> Callable[[dict[str, Any], Context], Derived]: + """The signed URL serves the scenario's own bytes, of another digest, on + both downloads.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + index = next(i for i, e in enumerate(exchanges) if "url" in e["request"]) + files, signed = exchanges[index - 1], exchanges[index] + body_file = f"{name}.bin" + signed["response"]["body_file"] = body_file + exchanges[index + 1 : index + 1] = [copy.deepcopy(files), copy.deepcopy(signed)] + return Derived( + copy.deepcopy(parent["call"]), + exchanges[: index + 3], + [*copy.deepcopy(parent["expect"][:-1]), ctx.raised("digest_mismatch")], + {body_file: b"Not the stored file.\n"}, + ) + + return derive + + +def _resubmit_other_spec(parent: dict[str, Any], ctx: Context) -> Derived: + """Search answers the built identity with the spec the fetch posted, + which differs from the one the build answered.""" + index = next( + i + for i, e in enumerate(parent["exchanges"]) + if e["request"].get("path") == "/search/resolve" + ) + exchanges = copy.deepcopy(parent["exchanges"][: index + 1]) + spec = exchanges[index]["response"]["json"]["parts"][0]["spec"] + posted = parent["call"][-1]["spec"]["spec_id"] + require(spec["spec_id"] != posted, "the build answered another spec_id") + spec["spec_id"] = spec["definition"]["spec_id"] = posted + error = ctx.raised("contract_violation", exchanges[index]["response"]) + return Derived( + copy.deepcopy(parent["call"]), + exchanges, + [*copy.deepcopy(parent["expect"][:-1]), error], + ) + + +def _frame_several(parent: dict[str, Any], ctx: Context) -> Derived: + require(len(parent["expect"][-1]["dataset"]["members"]) > 1, "several members") + return Derived( + [copy.deepcopy(parent["call"][0]), {"op": "fetch", "layout": "frame"}], + copy.deepcopy(parent["exchanges"][:1]), + [copy.deepcopy(parent["expect"][0]), ctx.raised("invalid_argument")], + ) + + +def _answer_ref(parent: dict[str, Any]) -> dict[str, Any]: + """The ref the parent's fetch of a one-member answer writes.""" + build = parent["exchanges"][_build_index(parent)] + manifest = build["response"]["json"] + (member,) = parent["expect"][-1]["dataset"]["members"] + artifact = pick_artifact(manifest, RENDERING) + require(artifact is not None, "the manifest lists the long Parquet artifact") + assert artifact is not None + return { + "format_version": 1, + "members": [ + { + "parts": member["parts"], + "sentence": member["sentence"], + "spec": { + "spec_id": member["spec_id"], + "definition": build["request"]["json"]["input"]["definition"], + }, + "content_version": member["content_version"], + "artifact": { + "digest": artifact["artifact_digest"], + "rendering": dict(RENDERING), + }, + } + ], + } + + +def _snapshot_expired(ref: dict[str, Any]) -> dict[str, Any]: + (member,) = ref["members"] + path = f"/datasets/{member['spec']['spec_id']}/{member['content_version']}" + return _refusal({"method": "GET", "path": path}, 410, _EXPIRED) + + +def _expired_rebuilt(parent: dict[str, Any], ctx: Context) -> Derived: + """The ref the parent's fetch writes, its snapshot expired, and the + parent's build, files and download as the rebuild.""" + ref = _answer_ref(parent) + index = _build_index(parent) + dataset = copy.deepcopy(parent["expect"][-1]["dataset"]) + del dataset["search_warning"] + return Derived( + [{"op": "fetch", "ref": ref}], + [_snapshot_expired(ref), *copy.deepcopy(parent["exchanges"][index:])], + [{"dataset": dataset}], + ) + + +def _expired_newer(parent: dict[str, Any], ctx: Context) -> Derived: + """As `_expired_rebuilt`, with the rebuild answering a newer version.""" + ref = _answer_ref(parent) + build = copy.deepcopy(parent["exchanges"][_build_index(parent)]) + build["response"]["json"]["content_version"] = NEWER_VERSION + error = ClientError( + FILE_EXPIRED, + error=VERSION_UNAVAILABLE, + newest_version=NEWER_VERSION, + trace_id=_EXPIRED["trace_id"], + ) + return Derived( + [{"op": "fetch", "ref": ref}], + [_snapshot_expired(ref), build], + [error.outcome(ctx.client_codes)], + ) + + +def _expired_other_spec(parent: dict[str, Any], ctx: Context) -> Derived: + """As `_expired_rebuilt`, with the rebuild's manifest naming + REBUILT_SPEC_ID, which raises before any download.""" + ref = _answer_ref(parent) + build = copy.deepcopy(parent["exchanges"][_build_index(parent)]) + build["response"]["json"]["definition"]["spec_id"] = REBUILT_SPEC_ID + session = ctx.session("synthetic", canned=[_snapshot_expired(ref), build]) + session.fetch_ref(ref) + require(not session.recorder.canned, "the lookup makes every exchange") + require( + _raises(session.expect[-1], "contract_violation", ctx), + "the rebuild of another spec_id raises ContractError", + ) + return Derived(session.call, session.recorder.exchanges, session.expect) + + +# The digest a ref names for a file the lookup never reaches. +UNREACHED_DIGEST = "sha256:" + "0" * 64 + + +def _expired_not_reproducible(parent: dict[str, Any], ctx: Context) -> Derived: + """A ref to the version the parent lists as newest, whose snapshot + refuses 410 artifact_expired and whose rebuild refuses 422 + member_not_resolvable, then the parent's versions exchange.""" + (step,) = parent["call"] + (outcome,) = parent["expect"] + version = outcome["newest_version"]["content_version"] + require(version is not None, "the parent lists a stored version") + spec = step["spec"] + ref = { + "format_version": 1, + "members": [ + { + "parts": [], + "sentence": spec["sentence"], + "spec": {"spec_id": spec["spec_id"], "definition": spec["definition"]}, + "content_version": version, + "artifact": {"digest": UNREACHED_DIGEST, "rendering": dict(RENDERING)}, + } + ], + } + body = _build_body(_step_spec(spec), None, RENDERING) + canned = [ + _snapshot_expired(ref), + _refusal( + {"method": "POST", "path": "/datasets", "json": body}, 422, _NOT_RESOLVABLE + ), + *copy.deepcopy(parent["exchanges"]), + ] + session = ctx.session("synthetic", canned=canned) + session.fetch_ref(ref) + require(not session.recorder.canned, "the lookup makes every exchange") + return Derived(session.call, session.recorder.exchanges, session.expect) + + +def _expired_file_selector(parent: dict[str, Any], ctx: Context) -> Derived: + """The files route refuses artifact_expired, and the file selector + redirects to the parent's signed download.""" + exchanges = copy.deepcopy(parent["exchanges"]) + (member,) = parent["call"][0]["ref"]["members"] + index = next(i for i, e in enumerate(exchanges) if "origin_path" in e["request"]) + files = exchanges[index] + path = selector_path( + member["spec"]["spec_id"], + member["content_version"], + member["artifact"]["rendering"], + ) + selector = { + "request": {"method": "GET", "path": path}, + "response": copy.deepcopy(files["response"]), + } + exchanges[index : index + 1] = [_refusal(files["request"], 410, _EXPIRED), selector] + return _same(parent, exchanges) + + +def _poll_index(exchanges: Sequence[dict[str, Any]]) -> int: + return next( + i + for i, e in enumerate(exchanges) + if e["request"].get("path", "").startswith("/datasets/operations/") + ) + + +def _async_fetch( + change: Callable[[list[dict[str, Any]], dict[str, Any]], None] | None = None, +) -> Callable[[dict[str, Any], Context], Derived]: + """The parent's mint and result as one fetch of its spec, which makes the + same exchanges. `change` edits the exchanges and the fetch's outcome.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + mint, result = parent["call"] + require( + mint["op"] == "mint" and result["op"] == "result", "a mint, then result" + ) + require( + "retry_after_ms" in parent["exchanges"][0]["response"]["json"]["operation"], + "the build's operation carries its pacing", + ) + exchanges = copy.deepcopy(parent["exchanges"]) + outcome = copy.deepcopy(parent["expect"][1]) + if change is not None: + change(exchanges, outcome["dataset"]["long_builds"][0]) + return Derived( + [{"op": "fetch", "spec": copy.deepcopy(mint["spec"])}], exchanges, [outcome] + ) + + return derive + + +def _poll_rate_limited(exchanges: list[dict[str, Any]], build: dict[str, Any]) -> None: + """A 429 with Retry-After 3 and no body answers the first poll.""" + index = _poll_index(exchanges) + refused = { + "request": copy.deepcopy(exchanges[index]["request"]), + "response": {"status": 429, "headers": {"retry-after": "3"}}, + } + exchanges.insert(index, refused) + build["poll_waits"].insert(1, 3.0) + + +def _operation_failed(exchanges: list[dict[str, Any]], build: dict[str, Any]) -> None: + """The first poll answers the operation failed with a retryable + operation_failed, and the build is posted again and runs as recorded. The + second build's operation is paced as the first's, so the waits repeat the + first wait.""" + index = _poll_index(exchanges) + failed = copy.deepcopy(exchanges[index]) + operation = failed["response"]["json"]["operation"] + operation["status"] = "failed" + operation.pop("progress", None) + failed["response"]["json"] = { + "operation": operation, + "error": dict(_OPERATION_FAILED), + } + exchanges[index:index] = [failed, copy.deepcopy(exchanges[0])] + build["poll_waits"].insert(0, build["poll_waits"][0]) + build["resubmissions"] = 1 + + +def _poll_busy(exchanges: list[dict[str, Any]], build: dict[str, Any]) -> None: + """A 503 answers the first poll, and two more answer the third, after + the second answered. Each spends a retry, the answer between restores + both, and each poll after a 503 waits the wait the 503's poll waited.""" + first = _poll_index(exchanges) + poll = exchanges[first]["request"] + exchanges.insert(first + 2, _refusal(poll, 503, _BUSY)) + exchanges.insert(first + 2, _refusal(poll, 503, _BUSY)) + exchanges.insert(first, _refusal(poll, 503, _BUSY)) + waits = build["poll_waits"] + build["poll_waits"] = [waits[0], waits[0], waits[1], *[waits[2]] * 3, *waits[3:]] + + +def _unpaced(exchanges: list[dict[str, Any]]) -> None: + """Every response loses its Retry-After and every operation resource its + retry_after_ms, so the client paces its polls by its own backoff.""" + for exchange in exchanges: + response = exchange["response"] + response.get("headers", {}).pop("retry-after", None) + body = response.get("json") + if isinstance(body, dict) and isinstance(body.get("operation"), dict): + body["operation"].pop("retry_after_ms", None) + + +def _poll_busy_unpaced(exchanges: list[dict[str, Any]], build: dict[str, Any]) -> None: + """No response paces the polls, and a 503 with no Retry-After answers the + second poll. Every poll waits the next step of the backoff, the one after + the 503 included.""" + _unpaced(exchanges) + first = _poll_index(exchanges) + poll = exchanges[first]["request"] + exchanges.insert(first + 1, _refusal(poll, 503, _BUSY)) + polls = sum(1 for e in exchanges if e["request"] == poll) + build["poll_waits"] = [ + min(POLL_BACKOFF_FIRST * 2**step, POLL_BACKOFF_CAP) for step in range(polls) + ] + + +# The Retry-After of the 503 that answers the first poll in +# `fetch-spec-poll-refused-retry-after`. +BUSY_POLL_RETRY_AFTER = 5 + + +def _poll_busy_retry_after( + exchanges: list[dict[str, Any]], build: dict[str, Any] +) -> None: + """A 503 with Retry-After BUSY_POLL_RETRY_AFTER answers the first poll. + The poll after it waits that long, and the polls after keep the server's + pacing.""" + index = _poll_index(exchanges) + headers = {"retry-after": str(BUSY_POLL_RETRY_AFTER)} + exchanges.insert(index, _refusal(exchanges[index]["request"], 503, _BUSY, headers)) + build["poll_waits"].insert(1, float(BUSY_POLL_RETRY_AFTER)) + + +_OPERATION_NOT_FOUND = _problem( + "operation_not_found", + 404, + "Not Found", + "No operation has this id.", + retryable=False, +) + + +# The codeless problem document of a 429 that says it is not retryable, which +# answers the first poll of `fetch-spec-poll-rate-limited-not-retryable`. +_RATE_LIMITED_FOR_GOOD = { + "title": "Too Many Requests", + "status": 429, + "detail": "This key has used its requests for the day.", + "trace_id": "0" * 32, + "retryable": False, +} + + +def _poll_refused_at_once( + status: int, body: dict[str, Any] +) -> Callable[[dict[str, Any], Context], Derived]: + """A refusal of `status` with the not-retryable `body` answers the first + poll, which raises it, and the exchanges after it go.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + derived = _async_fetch()(parent, ctx) + index = _poll_index(derived.exchanges) + refused = _refusal(derived.exchanges[index]["request"], status, body) + (outcome,) = derived.expect + (build,) = outcome["dataset"]["long_builds"] + error = refusal_error(status, body, ctx.actions).outcome(ctx.client_codes) + entry = {**build, "poll_waits": build["poll_waits"][:1]} + return Derived( + derived.call, + [*derived.exchanges[:index], refused], + [with_step_notes(error, long_builds=[entry], retry_waits=(), warnings=())], + ) + + return derive + + +def _signed_url_refused(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + index = next(i for i, e in enumerate(exchanges) if "url" in e["request"]) + files, signed = exchanges[index - 1], exchanges[index] + refused = { + "request": copy.deepcopy(signed["request"]), + "response": {"status": 403, "headers": {"content-type": "application/xml"}}, + } + exchanges[index:index] = [refused, copy.deepcopy(files)] + return _same(parent, exchanges) + + +def _signed_index(exchanges: Sequence[dict[str, Any]]) -> int: + return next(i for i, e in enumerate(exchanges) if "url" in e["request"]) + + +def _signed_fetch_partial(parent: dict[str, Any], ctx: Context) -> Derived: + """The first signed fetch answers 206 with the file's bytes, and the files + route is asked again.""" + exchanges = copy.deepcopy(parent["exchanges"]) + index = _signed_index(exchanges) + files, signed = exchanges[index - 1], exchanges[index] + partial = copy.deepcopy(signed) + partial["response"]["status"] = 206 + exchanges[index:index] = [partial, copy.deepcopy(files)] + return _same(parent, exchanges) + + +def _files_route_answers( + status: int, *, keep_location: bool +) -> Callable[[dict[str, Any], Context], Derived]: + """The files route answers `status`, with its location when + `keep_location`, and raises ContractError unexpected_response. The + exchanges after it go.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + index = _signed_index(parent["exchanges"]) - 1 + exchanges = copy.deepcopy(parent["exchanges"][: index + 1]) + response = exchanges[index]["response"] + response["status"] = status + dropped = {"content-type"} if keep_location else {"location", "content-type"} + response["headers"] = { + name: value + for name, value in response.get("headers", {}).items() + if name not in dropped + } + error = ctx.raised("unexpected_response", response) + return Derived( + copy.deepcopy(parent["call"]), + exchanges, + [*copy.deepcopy(parent["expect"][:-1]), error], + ) + + return derive + + +def _files_route_serves_file(parent: dict[str, Any], ctx: Context) -> Derived: + """The files route answers 200 with the file the parent's signed URL + served, and no signed fetch follows.""" + exchanges = copy.deepcopy(parent["exchanges"]) + index = _signed_index(exchanges) + files, signed = exchanges[index - 1], exchanges[index] + headers = { + name: value + for name, value in files["response"].get("headers", {}).items() + if name != "location" + } + headers["content-type"] = signed["response"]["headers"]["content-type"] + files["response"] = {**signed["response"], "headers": headers} + del exchanges[index] + return _same(parent, exchanges) + + +def _folded_parts_unnamed(parent: dict[str, Any], ctx: Context) -> Derived: + """The two folded parts of the first member lose their variable_text, + the first its member and the second to an empty string, so that member + names no part and its part value is its sentence.""" + exchanges = copy.deepcopy(parent["exchanges"]) + parts = exchanges[0]["response"]["json"]["parts"] + require(parts[0]["spec"]["spec_id"] == parts[1]["spec"]["spec_id"], "folded parts") + del parts[0]["variable_text"] + parts[1]["variable_text"] = "" + derived = _same(parent, exchanges) + dataset = derived.expect[-1]["dataset"] + member = dataset["members"][0] + member["parts"] = [] + dataset["part_rows"][0]["part"] = part_label(member) + return derived + + +def _specs_an_object(response: dict[str, Any]) -> None: + """Part 0's candidate specs become an object keyed by index.""" + candidates = response["json"]["parts"][0]["candidates"] + candidates["specs"] = {str(i): s for i, s in enumerate(candidates["specs"])} + + +def _operations_an_object(parent: dict[str, Any], ctx: Context) -> Derived: + """Part 0's operations become the one operation GROWTH, as an object.""" + exchanges = copy.deepcopy(parent["exchanges"]) + part = exchanges[0]["response"]["json"]["parts"][0] + require(part.get("operations") == [], "part 0 has no operation") + part["operations"] = dict(GROWTH) + return _same(parent, exchanges) + + +def _artifact_unlisted(parent: dict[str, Any], ctx: Context) -> Derived: + """The snapshot manifest lists no artifact of the ref's digest, and the + file selector, in the ref member's rendering, redirects to the parent's + signed download.""" + exchanges = copy.deepcopy(parent["exchanges"]) + (member,) = parent["call"][0]["ref"]["members"] + manifest = exchanges[0]["response"]["json"] + digest = member["artifact"]["digest"] + manifest["artifacts"] = [ + a for a in manifest["artifacts"] if a["artifact_digest"] != digest + ] + index = next(i for i, e in enumerate(exchanges) if "origin_path" in e["request"]) + path = selector_path( + member["spec"]["spec_id"], + member["content_version"], + member["artifact"]["rendering"], + ) + exchanges[index]["request"] = {"method": "GET", "path": path} + return _same(parent, exchanges) + + +def _deferred(body: dict[str, Any]) -> None: + body["parts"][1]["status"] = "deferred" + + +def _unknown_enum_value(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + exchanges[0]["response"]["json"]["parts"][0]["no_data"]["category"] = "undetermined" + return _same(parent, exchanges) + + +def _null_member(parent: dict[str, Any], ctx: Context) -> Derived: + """Flips the status column's `distinct`, an optional member that admits + null, between left out and served as null.""" + exchanges = copy.deepcopy(parent["exchanges"]) + manifest = exchanges[_build_index(parent)]["response"]["json"] + column = next( + c for c in manifest["output_options"]["columns"] if c["kind"] == "status" + ) + if "distinct" in column: + require(column["distinct"] is None, "the status column's distinct is null") + del column["distinct"] + else: + column["distinct"] = None + return _same(parent, exchanges) + + +def _renamed_strict_field(parent: dict[str, Any], ctx: Context) -> Derived: + index = _build_index(parent) + exchanges = copy.deepcopy(parent["exchanges"][: index + 1]) + manifest = exchanges[index]["response"]["json"] + manifest["contentVersion"] = manifest.pop("content_version") + error = ctx.raised("contract_violation", exchanges[index]["response"]) + return Derived( + copy.deepcopy(parent["call"]), exchanges, [parent["expect"][0], error] + ) + + +type BodyEdit = Callable[[Any, Context], Any] + + +def _choice( + option: int | str, + part: int | str | None = None, + *, + edit: BodyEdit | None = None, + headers: Mapping[str, str] | None = None, +) -> Callable[[dict[str, Any], Context], Derived]: + """The parent's search, its answer body changed by `edit` and its + response carrying `headers` too, then a choice that refuses and makes no + request.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + canned = copy.deepcopy(parent["exchanges"][:1]) + response = canned[0]["response"] + if headers is not None: + response.setdefault("headers", {}).update(headers) + if edit is not None: + response["json"] = edit(response["json"], ctx) + session = ctx.session("synthetic", canned=canned) + answer = session.search(parent["call"][0]["question"]) + session.choose(answer, option, part=part) + return Derived(session.call, session.recorder.exchanges, session.expect) + + return derive + + +def _without_options(body: Any, ctx: Context) -> Any: + """Each no_data part's options go, as from a build that serves none.""" + body = copy.deepcopy(body) + for part in body["parts"]: + part.get("no_data", {}).pop("options", None) + return body + + +def _raises(outcome: Mapping[str, Any], code: str, ctx: Context) -> bool: + """Whether `outcome` is the error a client raises itself with `code`, + whatever trace id it carries.""" + error = outcome.get("error", {}) + wanted = ctx.raised(code)["error"]["class"] + return (error.get("class"), error.get("code")) == (wanted, code) + + +def _choice_refused( + option: int | str, part: int | str | None = None, *, edit: BodyEdit | None = None +) -> Callable[[dict[str, Any], Context], Derived]: + choose = _choice(option, part, edit=edit) + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + derived = choose(parent, ctx) + require( + derived.expect[-1] == ctx.raised("choice_invalid"), + "the choice refuses", + ) + return derived + + return derive + + +def _answer_edit( + change: Callable[[dict[str, Any]], None], + headers: Mapping[str, str] | None = None, +) -> Callable[[dict[str, Any], Context], Derived]: + """The parent with its first answer body changed, and that answer's + outcome derived again. With `headers`, the answer's response carries + them too, and the parent's steps run again over the changed exchanges, + so every outcome that reads the answer follows from them.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + body = exchanges[0]["response"]["json"] + change(body) + if headers is not None: + exchanges[0]["response"].setdefault("headers", {}).update(headers) + session = ctx.session("synthetic", canned=exchanges) + drive(session, parent["call"]) + require(not session.recorder.canned, "the steps make every exchange") + return Derived(session.call, session.recorder.exchanges, session.expect) + expect = copy.deepcopy(parent["expect"]) + expect[0] = answer_outcome(answer_from_body(body), gap_kinds(ctx.actions)) + return Derived(copy.deepcopy(parent["call"]), exchanges, expect) + + return derive + + +# The x-dfo-trace-id header the Search responses of `answer-timed-out` and +# `choose-refused-shared-label` carry. The first's answer_incomplete carries +# it, and the second's choice_invalid, which describes the caller's choice, +# does not. +ANSWER_TRACE_ID = "5" * 32 + + +def _timed_out(body: dict[str, Any]) -> None: + body["diagnostics"]["timed_out"] = True + + +def _unsupported(body: dict[str, Any]) -> None: + part = body["parts"][1] + del part["no_data"] + part["status"] = "unsupported" + part["unsupported"] = { + "code": "scope_too_broad", + "pointer": "/definition/identity", + "detail": "the family is too broad to settle; bind a what or how slot", + } + + +def _unknown_kind(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + exchanges[0]["response"]["json"]["kind"] = "verdict" + error = ctx.raised("contract_violation", exchanges[0]["response"]) + return Derived(copy.deepcopy(parent["call"]), exchanges, [error]) + + +def _partial_nothing_answered(parent: dict[str, Any], ctx: Context) -> Derived: + require(parent["expect"][0]["answer"]["specs"] == [], "no part has a reading") + (search,) = parent["exchanges"] + return Derived( + [*copy.deepcopy(parent["call"]), {"op": "fetch", "partial": True}], + copy.deepcopy(parent["exchanges"]), + [ + *copy.deepcopy(parent["expect"]), + ctx.raised("answer_incomplete", search["response"]), + ], + ) + + +_INFO_NOTICE = { + "code": "retrieval_score_weak", + "severity": "info", + "message": ( + "the chosen reading's match to the query is weak; treat it with less " + "confidence than a strong match." + ), +} + + +# A declared default as a recorded definite part states it, the item +# `choose-candidate-echoes-assumptions` records on its definite part. +_DECLARED_DEFAULT = { + "kind": "declared_default", + "binding_ref": "how:dac2aAidType", + "text": "official development assistance", + "refs": ["DAC2aAidType206"], +} + + +def _assumption_clause(part_index: int, texts: Sequence[str]) -> list[dict[str, Any]]: + """The sentence plan tokens Search renders for a part's assumptions: + one `segment="assumption"` clause, "Assumed: a; b.".""" + + def token(text: str) -> dict[str, Any]: + return { + "kind": "text", + "text": text, + "segment": "assumption", + "entity_refs": [], + "states": [], + "part_index": part_index, + } + + clause = [token(" "), token("Assumed: ")] + for index, text in enumerate(texts): + clause.extend([token("; "), token(text)] if index else [token(text)]) + return [*clause, token(".")] + + +def _picked_reading_assumes(parent: dict[str, Any], ctx: Context) -> Derived: + """The parent's search and pick, with the picked reading's + reading_assumptions entry holding one declared default. The resubmit + echoes it unchanged, and Search's answer states it.""" + exchanges = copy.deepcopy(parent["exchanges"][:2]) + search, resubmit = exchanges + part = search["response"]["json"]["parts"][0] + spec_id = part["candidates"]["specs"][0]["spec_id"] + require(part["reading_assumptions"][spec_id] == [], "the reading assumes nothing") + part["reading_assumptions"][spec_id] = [copy.deepcopy(_DECLARED_DEFAULT)] + (entry,) = resubmit["request"]["json"]["input"]["entries"] + entry["assumptions"] = [copy.deepcopy(_DECLARED_DEFAULT)] + body = resubmit["response"]["json"] + body["parts"][0]["assumptions"] = [copy.deepcopy(_DECLARED_DEFAULT)] + clause = _assumption_clause(0, [_DECLARED_DEFAULT["text"]]) + body["sentence_plan"].extend(clause) + body["rendered_sentence"] += "".join(token["text"] for token in clause) + answer = answer_from_body(search["response"]["json"]) + kinds = gap_kinds(ctx.actions) + posted = choice_input(answer, choice_for(answer, kinds, None, 0)) + require(posted == resubmit["request"]["json"]["input"], "the pick echoes the list") + return Derived( + copy.deepcopy(parent["call"][:2]), + exchanges, + [ + answer_outcome(answer, kinds), + answer_outcome(answer_from_body(body), kinds), + ], + ) + + +def _strict_info_notice(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + exchanges[0]["response"]["json"]["parts"][0]["warnings"].append(dict(_INFO_NOTICE)) + call = copy.deepcopy(parent["call"]) + call[1]["strict"] = True + require( + parent["expect"][1]["dataset"]["search_warning"] is False, + "the parent's fetch issues no SearchWarning", + ) + return Derived(call, exchanges, copy.deepcopy(parent["expect"])) + + +def _signed_url_refused_twice(parent: dict[str, Any], ctx: Context) -> Derived: + """Both signed fetches refuse 403, the second after the files route was + asked again.""" + exchanges = copy.deepcopy(parent["exchanges"]) + index = next(i for i, e in enumerate(exchanges) if "url" in e["request"]) + files, signed = exchanges[index - 1], exchanges[index] + signed["response"] = {"status": 403, "headers": {"content-type": "application/xml"}} + return Derived( + copy.deepcopy(parent["call"]), + [*exchanges[: index + 1], copy.deepcopy(files), copy.deepcopy(signed)], + [*copy.deepcopy(parent["expect"][:-1]), ctx.raised("download_failed")], + ) + + +# The relative Location a files route answers in `fetch-spec-relative-location`, +# which names a path beside the route's own. +RELATIVE_LOCATION = "bytes" + + +def _relative_location(parent: dict[str, Any], ctx: Context) -> Derived: + """The files route answers RELATIVE_LOCATION, and the file comes from the + path it resolves to against the route's URL, on the API's origin.""" + exchanges = copy.deepcopy(parent["exchanges"]) + index = next(i for i, e in enumerate(exchanges) if "url" in e["request"]) + files, signed = exchanges[index - 1], exchanges[index] + route = files["request"]["origin_path"] + files["response"]["headers"]["location"] = RELATIVE_LOCATION + resolved = urlsplit(urljoin(f"https://api.invalid{route}", RELATIVE_LOCATION)) + signed["request"] = {"method": "GET", "origin_path": resolved.path} + return _same(parent, exchanges) + + +def _failed_without_error(parent: dict[str, Any], ctx: Context) -> Derived: + """The resumed operation's first poll answers it failed with no error.""" + resume, poll = copy.deepcopy(parent["exchanges"][:2]) + operation = poll["response"]["json"]["operation"] + operation["status"] = "failed" + operation.pop("progress", None) + poll["response"]["json"] = {"operation": operation} + error, _ = failed_operation( + poll["response"]["json"], ctx.actions, poll["response"].get("headers") + ) + (build,) = parent["expect"][1]["dataset"]["long_builds"] + entry = {**build, "poll_waits": build["poll_waits"][:1], "resubmissions": 0} + outcome = with_step_notes( + error.outcome(ctx.client_codes), + long_builds=[entry], + retry_waits=(), + warnings=(), + ) + return Derived( + copy.deepcopy(parent["call"]), + [resume, poll], + [copy.deepcopy(parent["expect"][0]), outcome], + ) + + +def _versions_renamed(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + body = exchanges[0]["response"]["json"] + body["items"] = body.pop("versions") + error = ctx.raised("contract_violation", exchanges[0]["response"]) + return Derived(copy.deepcopy(parent["call"]), exchanges, [error]) + + +# The Sunset header `search-sunset-warning`'s responses carry, with no +# Deprecation header beside it. +SUNSET = "Sat, 01 May 2027 00:00:00 GMT" + + +def _sunset_twice(parent: dict[str, Any], ctx: Context) -> Derived: + """The parent's search made twice, each response carrying SUNSET. The + first warns, and the second, with the same value, does not.""" + exchange = copy.deepcopy(parent["exchanges"][0]) + exchange["response"]["headers"]["sunset"] = SUNSET + (step,) = parent["call"] + (outcome,) = parent["expect"] + warned = with_step_notes( + copy.deepcopy(outcome), + long_builds=(), + retry_waits=(), + warnings=header_warnings(exchange["response"]["headers"], set()), + ) + return Derived( + [copy.deepcopy(step), copy.deepcopy(step)], + [exchange, copy.deepcopy(exchange)], + [warned, copy.deepcopy(outcome)], + ) + + +# The origin of `fetch-spec-foreign-artifact-url`'s artifact urls, neither the +# API's nor the storage host's. +FOREIGN_ORIGIN = "https://downloads.example.com" + + +def _artifact_urls_on( + origin: Callable[[dict[str, Any]], str], +) -> Callable[[dict[str, Any], Context], Derived]: + """Every artifact `url` of the parent's build becomes absolute on the + origin `origin` gives for the parent. On the API's own origin the record + stands, and on any other the build raises ContractError and the + exchanges after it go.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + exchanges = copy.deepcopy(parent["exchanges"]) + index = _build_index(parent) + at = origin(parent) + for artifact in exchanges[index]["response"]["json"]["artifacts"]: + artifact["url"] = at + artifact["url"] + if at == _origin(parent["origin"]["base_url"]): + return _same(parent, exchanges) + error = ctx.raised("contract_violation", exchanges[index]["response"]) + return Derived( + copy.deepcopy(parent["call"]), + exchanges[: index + 1], + [*copy.deepcopy(parent["expect"][:-1]), error], + ) + + return derive + + +# The x-dfo-warning messages and the Deprecation value +# `search-server-warning`'s responses carry. +SERVER_MESSAGE = "Search runs on a reduced index while it is rebuilt." +OTHER_SERVER_MESSAGE = "Search answers from a cached release." +DEPRECATION = "@1777593600" + + +def _server_warnings(parent: dict[str, Any], ctx: Context) -> Derived: + """The parent's search made three times. The first response carries + SERVER_MESSAGE, the second the same message and SUNSET, and the third + OTHER_SERVER_MESSAGE, DEPRECATION and SUNSET. The warnings each step + issues are written out, so a change to the warning rules fails the + record.""" + (step,) = parent["call"] + (outcome,) = parent["expect"] + exchange = parent["exchanges"][0] + carried = [ + {"x-dfo-warning": SERVER_MESSAGE}, + {"x-dfo-warning": SERVER_MESSAGE, "sunset": SUNSET}, + { + "x-dfo-warning": OTHER_SERVER_MESSAGE, + "deprecation": DEPRECATION, + "sunset": SUNSET, + }, + ] + issued = [ + ["server_warning"], + ["route_deprecated"], + ["route_deprecated", "server_warning"], + ] + exchanges = [] + for headers in carried: + made = copy.deepcopy(exchange) + made["response"]["headers"].update(headers) + exchanges.append(made) + expect = [ + with_step_notes( + copy.deepcopy(outcome), long_builds=(), retry_waits=(), warnings=codes + ) + for codes in issued + ] + return Derived([copy.deepcopy(step) for _ in carried], exchanges, expect) + + +def _search_ends( + change: Callable[[dict[str, Any]], None], code: str +) -> Callable[[dict[str, Any], Context], Derived]: + """The parent's search alone, its response changed by `change`, ending + in the client error `code`.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + exchange = copy.deepcopy(parent["exchanges"][0]) + change(exchange["response"]) + error = ctx.raised(code, exchange["response"]) + return Derived(copy.deepcopy(parent["call"][:1]), [exchange], [error]) + + return derive + + +def _status_a_number(response: dict[str, Any]) -> None: + response["json"]["parts"][1]["status"] = 7 + + +def _definition_spec_id_differs(response: dict[str, Any]) -> None: + response["json"]["parts"][0]["spec"]["definition"]["spec_id"] = UNKNOWN_SPEC_ID + + +# The spec_id a Search spec's definition names in +# `answer-definition-spec-id-mismatch`, one no build answered. +UNKNOWN_SPEC_ID = "spec_" + "0" * 32 + + +def _without_json(response: dict[str, Any]) -> None: + del response["json"] + response["headers"] = { + "content-type": "text/html; charset=utf-8", + "x-dfo-trace-id": READ_TRACE_ID, + } + + +def _without_data_query(body: Any, ctx: Context) -> Any: + """The first option of the one no_data part loses its data_query.""" + body = copy.deepcopy(body) + del body["parts"][0]["no_data"]["options"][0]["data_query"] + return body + + +def _choice_without_data_query(parent: dict[str, Any], ctx: Context) -> Derived: + derived = _choice(parent["call"][1]["option"], edit=_without_data_query)( + parent, ctx + ) + require( + _raises(derived.expect[-1], "contract_violation", ctx), + "the choice raises ContractError", + ) + return derived + + +def _choice_posted(edit: BodyEdit) -> Callable[[dict[str, Any], Context], Derived]: + """The parent's search, its answer body changed by `edit`, then its + choice, which posts the input the rules give for the changed answer and + takes the parent's recorded response to it.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + search, choose = parent["call"] + canned = copy.deepcopy(parent["exchanges"][:2]) + body = edit(canned[0]["response"]["json"], ctx) + canned[0]["response"]["json"] = body + answer = answer_from_body(body) + choice = choice_for( + answer, gap_kinds(ctx.actions), choose.get("part"), choose["option"] + ) + canned[1]["request"]["json"] = search_body(choice_input(answer, choice)) + session = ctx.session("synthetic", canned=canned) + answered = session.search(search["question"]) + session.choose(answered, choose["option"], part=choose.get("part")) + return Derived(session.call, session.recorder.exchanges, session.expect) + + return derive + + +# The operation `choose-echoes-separate-and-operations`'s definite part asks for. +GROWTH = {"verb": "growth", "phrase": "growth of GDP", "over": "year"} + + +def _separate_with_operation(body: Any, ctx: Context) -> Any: + """Part 0, the definite one, is asked beside the others and asks for + GROWTH.""" + body = copy.deepcopy(body) + body["parts"][0].update(separate=True, operations=[dict(GROWTH)]) + return body + + +def _definite_unsupported(body: Any, ctx: Context) -> Any: + """Part 0, the definite one, becomes an unsupported part with no + restatement.""" + body = copy.deepcopy(body) + part = body["parts"][0] + for member in ("spec", "restatement", "assumptions"): + part.pop(member, None) + part["status"] = "unsupported" + part["unsupported"] = { + "code": "scope_too_broad", + "pointer": "/definition/identity", + "detail": "the family is too broad to settle; bind a what or how slot", + } + return body + + +def _definite_deferred(body: Any, ctx: Context) -> Any: + """Part 0 takes the status "deferred", which no client knows, and loses + its restatement.""" + body = copy.deepcopy(body) + body["parts"][0]["status"] = "deferred" + body["parts"][0].pop("restatement", None) + return body + + +def _definite_unnamed(body: Any, ctx: Context) -> Any: + """Part 0, the definite one, loses its variable_text.""" + body = copy.deepcopy(body) + del body["parts"][0]["variable_text"] + return body + + +def _labels_shared(body: Any, ctx: Context) -> Any: + """The no_data part's second option takes the first one's label.""" + body = copy.deepcopy(body) + options = body["parts"][0]["no_data"]["options"] + options[1]["label"] = options[0]["label"] + return body + + +def _first_candidate_label(body: Any) -> str: + """The label of the first candidate of the answer's first part, which no + other candidate of that part shares.""" + specs = body["parts"][0]["candidates"]["specs"] + labels = [candidate_label(spec) for spec in specs] + require( + labels[0] is not None and labels.count(labels[0]) == 1, + "the first candidate's label is its own", + ) + assert labels[0] is not None + return labels[0] + + +def _candidate_by_label(parent: dict[str, Any], ctx: Context) -> Derived: + """The parent's search and its choice of candidate 0, named by its label, + which posts what the index posts and reaches the same answer.""" + search, choose = parent["call"][:2] + require(choose.get("option") == 0, "the parent chooses candidate 0") + label = _first_candidate_label(parent["exchanges"][0]["response"]["json"]) + session = ctx.session("synthetic", canned=copy.deepcopy(parent["exchanges"][:2])) + answer = session.search(search["question"]) + session.choose(answer, label, part=choose.get("part")) + require(not session.recorder.canned, "the choice makes the parent's request") + require( + session.expect == parent["expect"][:2], + "the label reaches the answer the index reaches", + ) + return Derived(session.call, session.recorder.exchanges, session.expect) + + +def _candidate_label_shared(parent: dict[str, Any], ctx: Context) -> Derived: + """The second candidate takes the first one's sentence plan, so both have + the first one's label, and the choice names that label.""" + + def edit(body: Any, ctx: Context) -> Any: + body = copy.deepcopy(body) + first, second = body["parts"][0]["candidates"]["specs"][:2] + plan = first["resolved"]["sentence_plan"] + second["resolved"]["sentence_plan"] = copy.deepcopy(plan) + return body + + label = _first_candidate_label(parent["exchanges"][0]["response"]["json"]) + return _choice_refused(label, edit=edit)(parent, ctx) + + +# The malformed items `_malformed_echo_items` adds. A required member of +# another type leaves an item unread; an optional member of another type, and a +# member the schema does not name, read as absent. +_OPERATION_BAD_VERB = {"verb": 7, "phrase": "top 5 donors"} +_OPERATION_BAD_OVER = { + "verb": "rank", + "phrase": "top 5 donors", + "over": 3, + "target_year": True, +} +_ASSUMPTION_BAD_TEXT = { + "kind": "place_scope", + "binding_ref": "where:", + "text": None, +} +_ASSUMPTION_BAD_REFS = { + "kind": "declared_default", + "binding_ref": "how:dacTypeOfFinance", + "text": "grants", + "refs": ["DACTypeOfFinance110", 110], + "note": "unread", +} +_ASSUMPTION_REFS_READ = { + "kind": "declared_default", + "binding_ref": "how:dacTypeOfFinance", + "text": "grants", + "refs": ["DACTypeOfFinance110"], +} + + +def _malformed_echo_items(body: Any, ctx: Context) -> Any: + """The definite part's operations hold 42, an operation whose verb is a + number and one whose over and target_year are not read before GROWTH, its + assumptions end with a string, one whose text is null and one with a + number among its refs and an unknown member, and the chosen candidate's + reading_assumptions, empty in the parent, hold 7 and an assumption whose + text is null, so none of them reads.""" + body = copy.deepcopy(body) + candidates, definite = body["parts"] + spec_id = candidates["candidates"]["specs"][0]["spec_id"] + unread = [7, copy.deepcopy(_ASSUMPTION_BAD_TEXT)] + candidates["reading_assumptions"][spec_id] += unread + definite["operations"] = [ + 42, + dict(_OPERATION_BAD_VERB), + dict(_OPERATION_BAD_OVER), + dict(GROWTH), + ] + definite["assumptions"] += [ + "assumed", + copy.deepcopy(_ASSUMPTION_BAD_TEXT), + copy.deepcopy(_ASSUMPTION_BAD_REFS), + ] + return body + + +def _echo_drops_malformed(parent: dict[str, Any], ctx: Context) -> Derived: + """The parent's choice over `_malformed_echo_items`' answer, which posts + each echoed list's items in their read forms and leaves out the items + that do not read.""" + derived = _choice_posted(_malformed_echo_items)(parent, ctx) + body = parent["exchanges"][0]["response"]["json"] + candidates, definite = body["parts"] + spec_id = candidates["candidates"]["specs"][0]["spec_id"] + chosen, beside = derived.exchanges[1]["request"]["json"]["input"]["entries"] + require( + candidates["reading_assumptions"][spec_id] == [] + and chosen["assumptions"] == [] + and beside["operations"] == [{"verb": "rank", "phrase": "top 5 donors"}, GROWTH] + and beside["assumptions"] == [*definite["assumptions"], _ASSUMPTION_REFS_READ], + "the echo posts each list's read forms", + ) + return derived + + +def _two_part_query(body: Any, ctx: Context) -> Any: + """The first option's data_query holds its one part twice.""" + body = copy.deepcopy(body) + query = body["parts"][0]["no_data"]["options"][0]["data_query"] + query["parts"] = [query["parts"][0], copy.deepcopy(query["parts"][0])] + return body + + +def _choice_raises( + code: str, edit: BodyEdit, headers: Mapping[str, str] | None = None +) -> Callable[[dict[str, Any], Context], Derived]: + """The parent's choice over its answer changed by `edit`, its Search + response carrying `headers` too, which raises the client code `code` + with no request.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + choose = parent["call"][1] + derived = _choice( + choose["option"], choose.get("part"), edit=edit, headers=headers + )(parent, ctx) + require(_raises(derived.expect[-1], code, ctx), f"the choice raises {code}") + return derived + + return derive + + +def _not_an_object(response: dict[str, Any]) -> None: + response["json"] = [response["json"]] + + +def _no_parts(response: dict[str, Any]) -> None: + response["json"]["parts"] = [] + + +def _spec_without(member: str) -> Callable[[dict[str, Any]], None]: + """Part 0's spec loses `member`, or its definition loses it when the + member is `identity`.""" + + def change(response: dict[str, Any]) -> None: + spec = response["json"]["parts"][0]["spec"] + (spec["definition"] if member == "identity" else spec).pop(member) + + return change + + +def _manifest_without(member: str) -> Callable[[dict[str, Any], Context], Derived]: + """The build's manifest definition loses `member`, a strict one, so the + build raises contract_violation and the exchanges after it go.""" + + def derive(parent: dict[str, Any], ctx: Context) -> Derived: + index = _build_index(parent) + exchanges = copy.deepcopy(parent["exchanges"][: index + 1]) + del exchanges[index]["response"]["json"]["definition"][member] + error = ctx.raised("contract_violation", exchanges[index]["response"]) + return Derived( + copy.deepcopy(parent["call"]), + exchanges, + [*copy.deepcopy(parent["expect"][:-1]), error], + ) + + return derive + + +def _nested_specs_unchecked(parent: dict[str, Any], ctx: Context) -> Derived: + """Each position that holds a Spec no client reads gets the chosen + answer's spec without resolved and without its definition's identity: + the first answer's no_data flagged_match and alternate_match, and the + chosen spec's resolved.equivalent_readings.""" + exchanges = copy.deepcopy(parent["exchanges"]) + asked, chosen = (e["response"]["json"] for e in exchanges[:2]) + no_data = next(p["no_data"] for p in asked["parts"] if p["status"] == "no_data") + spec = chosen["parts"][0]["spec"] + bare = copy.deepcopy(spec) + del bare["resolved"], bare["definition"]["identity"] + no_data["flagged_match"] = copy.deepcopy(bare) + no_data["alternate_match"] = copy.deepcopy(bare) + spec["resolved"]["equivalent_readings"] = [bare] + return _same(parent, exchanges) + + +# The trace id the codeless problem document of `search-refused-without-code` +# carries, and the x-dfo-trace-id header it and `search-unauthorized` carry. +BODY_TRACE_ID = "1" * 32 +HEADER_TRACE_ID = "2" * 32 + + +def _refused_without_code(parent: dict[str, Any], ctx: Context) -> Derived: + """A 503 problem document with no code, retryable false and a trace id + answers the search, which raises it unretried.""" + first = parent["exchanges"][0] + body = { + "title": "Service Unavailable", + "status": 503, + "detail": "The service is busy.", + "trace_id": BODY_TRACE_ID, + "retryable": False, + } + refused = _refusal(first["request"], 503, body) + refused["response"]["headers"]["x-dfo-trace-id"] = HEADER_TRACE_ID + error = refusal_error( + 503, body, ctx.actions, refused["response"]["headers"] + ).outcome(ctx.client_codes) + return Derived(copy.deepcopy(parent["call"]), [refused], [error]) + + +def _unauthorized(parent: dict[str, Any], ctx: Context) -> Derived: + """A bodiless 401 with a trace id header answers the search. The + replay's key does not change when the client resolves it again, so the + client sends nothing more, and the error's trace id is the header's.""" + first = parent["exchanges"][0] + headers = {"www-authenticate": "Bearer", "x-dfo-trace-id": HEADER_TRACE_ID} + refused = { + "request": copy.deepcopy(first["request"]), + "response": {"status": 401, "headers": headers}, + } + error = refusal_error(401, None, ctx.actions, headers).outcome(ctx.client_codes) + return Derived(copy.deepcopy(parent["call"]), [refused], [error]) + + +def _empty_narrowing(parent: dict[str, Any], ctx: Context) -> Derived: + """The fetch names `entities: {}` and `facets: {}`, which narrow nothing.""" + derived = _same(parent, copy.deepcopy(parent["exchanges"])) + derived.call[0].update(entities={}, facets={}) + return derived + + +SYNTHETIC = ( + Synthetic( + "search-retry-after-503", + "search-place-ambiguous", + "A 503 service_unavailable with retryable true and Retry-After 1 answers the first search.", + "A retryable 503 problem with Retry-After is retried after the wait it names, and the " + "search then reaches the same answer; the retry spends one of the two default retries.", + _retry_after_503, + ), + Synthetic( + "search-proxy-rate-limited", + "search-place-ambiguous", + "The website proxy's own 429 {error, retry, detail} with Retry-After 2 answers the first search.", + "The proxy's 429 body carries no code or retryable: error is the code and retry " + '"retry_after_delay" makes it retryable, so the client waits the Retry-After seconds, ' + "retries, and reaches the same answer.", + _proxy_429, + ), + Synthetic( + "search-proxy-unavailable", + "search-place-ambiguous", + "The website proxy's own 502 {error, retry, detail} answers the search and both retries.", + "The proxy's 502 body is retryable through its retry member and has no Retry-After, so " + "the client backs off and retries twice, then raises ServerError with the error member, " + "transient_unavailable, as its code.", + _proxy_502, + ), + Synthetic( + "fetch-retry-after-504", + "answer-definite-fetch", + "A 504 timeout with retryable true answers the first build.", + "A synchronous build cut off at the server's limit answers a retryable 504 timeout; the " + "client waits the first backoff, 0.5 seconds, builds once more and reaches the same " + "dataset.", + _retry_after_504(), + ), + Synthetic( + "fetch-spec-504-retry-after", + "fetch-spec-known-sentence", + "A 504 timeout with retryable true and Retry-After 5 answers the build.", + "A build cut off by a 504 that carries Retry-After is posted once more after the " + "Retry-After seconds, not the backoff, and reaches the same dataset.", + _retry_after_504({"retry-after": "5"}), + ), + Synthetic( + "fetch-spec-504-twice", + "fetch-spec-known-sentence", + "A 504 timeout with retryable true answers the build and its one retry.", + "A synchronous build cut off twice is retried once only: the second 504 raises the " + "timeout code's ServerError.", + _ends_at_build(_cut_off_twice), + ), + Synthetic( + "fetch-spec-504-then-503", + "fetch-spec-known-sentence", + "A 504 timeout answers the build, and a 503 service_unavailable its one retry.", + "After a 504 cut-off the build is posted once more only, so the 503 that answers " + "that post raises its ServerError although one retry of the two is left.", + _ends_at_build(_cut_off_then_busy), + ), + Synthetic( + "fetch-spec-503-then-504", + "fetch-spec-known-sentence", + "A 503 service_unavailable answers the build, and a 504 timeout its first retry.", + "A 504 that cuts off the first retry is the first cut-off, so the build is posted " + "once more, the second of its two retries, after waits of 0.5 and 1 seconds, and " + "reaches the same dataset.", + _busy_then_cut_off, + ), + Synthetic( + "fetch-spec-member-not-resolvable", + "fetch-spec-known-sentence", + "A 422 member_not_resolvable answers the build.", + "A build refused because the spec no longer resolves raises InvalidRequestError with " + "the server's code, and makes no further request.", + _ends_at_build(_not_resolvable), + ), + Synthetic( + "fetch-spec-capability-unavailable", + "fetch-spec-frame-layout", + "A 501 capability_unavailable answers the build.", + "A well-formed build that asks for a rendering this deployment does not enable " + "refuses 501 capability_unavailable, which raises InvalidRequestError, since the " + "caller asks for another rendering, and makes no further request.", + _ends_at_build(_capability_unavailable), + ), + Synthetic( + "fetch-spec-strict-warning", + "fetch-spec-known-sentence", + f"The fetch is strict, the build's response carries x-dfo-trace-id {READ_TRACE_ID}, " + "and the exchanges after the build go.", + "A strict fetch raises the manifest's first warning above info severity, " + "coverage_below_scope at warn here, as DataWarning before the download, with the " + "trace id of the build response it read.", + _strict_warning, + ), + Synthetic( + "fetch-spec-digest-mismatch", + "fetch-spec-known-sentence", + "The signed download serves other bytes, and the files route is asked once more for the same.", + "Bytes that do not hash to the artifact's digest ask the files route for a fresh " + "redirect once; a second mismatch raises ServerError digest_mismatch.", + _digest_mismatch("fetch-spec-digest-mismatch"), + ), + Synthetic( + "fetch-spec-resubmit-other-spec", + "fetch-spec-narrowed", + "Search answers the built identity with the posted spec_id, and the exchanges after it go.", + "When Search answers the built identity with a spec_id other than the built one, the " + "client raises ContractError before the download.", + _resubmit_other_spec, + ), + Synthetic( + "fetch-frame-several-readings", + "answer-several-readings-folded", + 'The fetch of the answer asks for layout "frame", and the exchanges after the search go.', + "The frame layout holds one reading, so fetching an answer with two members in it " + "raises InvalidRequestError before any build.", + _frame_several, + ), + Synthetic( + "fetch-ref-expired-rebuild-same-version", + "answer-definite-fetch", + "A ref to the fetched member, whose snapshot route refuses 410 artifact_expired; the parent's build, files and download follow.", + "A ref whose snapshot refuses artifact_expired builds its spec again with the ref's " + "rendering; the build answers the same content_version, so the client downloads it " + "and returns the ref's member, its parts and sentence kept, with no Search call.", + _expired_rebuilt, + ), + Synthetic( + "fetch-ref-expired-newer-version", + "answer-definite-fetch", + f"As fetch-ref-expired-rebuild-same-version, with the rebuild answering {NEWER_VERSION}.", + "A rebuild that answers another content_version cannot return the stored one: the " + "client raises VersionUnavailableError with the snapshot's artifact_expired code and " + "the rebuilt version as the newest, and downloads nothing.", + _expired_newer, + ), + Synthetic( + "fetch-ref-expired-rebuild-other-spec", + "answer-definite-fetch", + f"As fetch-ref-expired-rebuild-same-version, with the rebuild's manifest naming {REBUILT_SPEC_ID}.", + "A rebuild of a ref's spec must answer the ref's spec_id as well as its " + "content_version: a manifest of another spec_id raises ContractError " + "contract_violation, as a snapshot of another spec_id does, and the client " + "downloads nothing.", + _expired_other_spec, + ), + Synthetic( + "fetch-ref-expired-not-reproducible", + "fetch-ref-newest-version", + "A fetch of a ref to the listed version, its unreached artifact digest all zeros, " + "whose snapshot refuses 410 artifact_expired and whose rebuild refuses 422 " + "member_not_resolvable, comes before the parent's versions exchange.", + "When the stored version has expired and the build is refused, the client asks the " + "versions route for the newest version alone with limit=1, and raises " + "VersionUnavailableError with the snapshot's artifact_expired code and that version " + "as the newest.", + _expired_not_reproducible, + ), + Synthetic( + "fetch-ref-expired-file-selector", + "fetch-ref", + "The files route refuses 410 artifact_expired, and the file selector redirects to the parent's signed download.", + "When the files route refuses artifact_expired, the client asks the file selector for " + "the stored version in the ref's rendering and downloads the file it redirects to, " + "which hashes to the stored digest.", + _expired_file_selector, + ), + Synthetic( + "fetch-ref-artifact-unlisted", + "fetch-ref", + "The snapshot manifest's artifacts no longer list the ref's digest, and the file " + "selector redirects to the parent's signed download.", + "A ref member whose digest the snapshot manifest does not list asks the file " + "selector in the ref member's own rendering, and bytes that hash to the stored " + "digest give the dataset.", + _artifact_unlisted, + ), + Synthetic( + "fetch-spec-async-build", + "mint-async-build", + "The mint and result steps become one fetch of the spec, which makes the same exchanges.", + "Fetching a spec whose build answers 202 polls the operation: it waits the 202's " + "retry_after_ms, then each poll's, backing off from 1 to 8 seconds when a poll gives " + "none, and downloads the done manifest's file.", + _async_fetch(), + ), + Synthetic( + "fetch-spec-poll-rate-limited", + "mint-async-build", + "As fetch-spec-async-build, with a bodiless 429 and Retry-After 3 answering the first poll.", + "A 429 on a poll spends no retry: the client waits the Retry-After seconds, polls " + "again and keeps the server's pacing after it.", + _async_fetch(_poll_rate_limited), + ), + Synthetic( + "fetch-spec-poll-refused", + "mint-async-build", + "As fetch-spec-async-build, with a 503 service_unavailable answering the first poll, " + "and two answering the third.", + "A retryable refused poll other than a 429 spends one of the two retries, and a poll " + "that answers restores them, so two 503s in a row after an answered poll are polled " + "again too. A refused poll changes no pacing: the poll after it waits what the " + "refused one waited.", + _async_fetch(_poll_busy), + ), + Synthetic( + "fetch-spec-poll-refused-backoff", + "mint-async-build", + "As fetch-spec-async-build, with no Retry-After and no retry_after_ms on any " + "response, and a 503 service_unavailable with no Retry-After answering the second " + "poll.", + "With no pacing from the server, each poll waits the next step of the 1, 2, 4, 8 " + "second backoff, and a refused poll uses a step too: the poll after the 503 waits " + "4 seconds.", + _async_fetch(_poll_busy_unpaced), + ), + Synthetic( + "fetch-spec-poll-refused-retry-after", + "mint-async-build", + "As fetch-spec-async-build, with a 503 service_unavailable and Retry-After " + f"{BUSY_POLL_RETRY_AFTER} answering the first poll.", + "The poll after a refused poll waits the refusal's Retry-After whatever its status, " + "as a 429's, and the polls after it keep the server's pacing.", + _async_fetch(_poll_busy_retry_after), + ), + Synthetic( + "fetch-spec-poll-rate-limited-not-retryable", + "mint-async-build", + "As fetch-spec-async-build, with a 429 problem document with no code and " + "retryable false answering the first poll, and the exchanges after it go.", + "A refusal's retryable outranks its status on a poll too: a 429 that says it is " + "not retryable raises RateLimitError at once, where a retryable 429 is polled " + "again without spending a retry.", + _poll_refused_at_once(429, _RATE_LIMITED_FOR_GOOD), + ), + Synthetic( + "fetch-spec-poll-not-found", + "mint-async-build", + "As fetch-spec-async-build, with a 404 operation_not_found answering the first poll, " + "and the exchanges after it go.", + "A refused poll that is not retryable raises its error at once, with the one poll " + "made in long_builds.", + _poll_refused_at_once(404, _OPERATION_NOT_FOUND), + ), + Synthetic( + "fetch-spec-operation-failed-resubmitted", + "mint-async-build", + "As fetch-spec-async-build, with the first poll answering failed with a retryable operation_failed, and the build posted again.", + "A poll that answers a failed operation whose error is retryable posts the same build " + "once more and polls the operation it starts; long_builds counts one resubmission.", + _async_fetch(_operation_failed), + ), + Synthetic( + "fetch-spec-signed-fetch-partial", + "fetch-spec-known-sentence", + "The first signed fetch answers 206 with the file's bytes, and the files route is " + "asked again.", + "A signed fetch that answers anything but 200 is a failed fetch: the client asks " + "the files route once more and fetches again, and the second fetch's 200 gives " + "the dataset.", + _signed_fetch_partial, + ), + Synthetic( + "fetch-spec-files-route-no-content", + "fetch-spec-known-sentence", + "The files route answers 204 with no location, and the exchanges after it go.", + "A files route that answers a status other than 302, 200 or a refusal raises " + "ContractError unexpected_response, with that response's trace id, and the " + "client fetches nothing.", + _files_route_answers(204, keep_location=False), + ), + Synthetic( + "fetch-spec-files-route-temporary-redirect", + "fetch-spec-known-sentence", + "The files route answers 307 with the parent's location, and the exchanges after " + "it go.", + "A files route redirects with 302 only: a 307, as any 3xx other than 302, raises " + "ContractError unexpected_response, and the client does not follow its location.", + _files_route_answers(307, keep_location=True), + ), + Synthetic( + "fetch-spec-files-route-serves-file", + "fetch-spec-known-sentence", + "The files route answers 200 with the file the signed URL served, and the signed " + "fetch goes.", + "A files route that answers 200 holds the file as its body, which the client " + "hashes against the artifact's digest with no further request.", + _files_route_serves_file, + ), + Synthetic( + "fetch-ref-signed-url-refused", + "fetch-ref", + "The signed download answers 403 once, and the files route is asked again.", + "A signed storage URL that refuses is never retried: the client asks the files route " + "for a fresh redirect and downloads from that, reaching the same dataset.", + _signed_url_refused, + ), + Synthetic( + "fetch-ref-signed-url-refused-twice", + "fetch-ref", + "The signed download answers 403, and so does the one the files route names when asked again.", + "A download asks the files route once and fetches the signed URL once, then asks the " + "route once more and fetches again, with no wait; a second refused fetch raises " + "ServerError download_failed.", + _signed_url_refused_twice, + ), + Synthetic( + "fetch-spec-relative-location", + "fetch-spec-known-sentence", + f"The files route's Location becomes the relative URL {RELATIVE_LOCATION!r}, and the " + "file comes from the path it resolves to.", + "A relative Location resolves against the files route's URL, not the base URL's " + "origin, and the client fetches the file there, on the API's origin, reaching the " + "same dataset.", + _relative_location, + ), + Synthetic( + "fetch-spec-foreign-artifact-url", + "fetch-spec-known-sentence", + f"Every artifact url of the build's manifest becomes absolute on {FOREIGN_ORIGIN}, " + "and the exchanges after the build go.", + "An artifact url on an origin other than the API's raises ContractError " + "contract_violation before any request for the file.", + _artifact_urls_on(lambda parent: FOREIGN_ORIGIN), + ), + Synthetic( + "fetch-spec-same-origin-artifact-url", + "fetch-spec-known-sentence", + "Every artifact url of the build's manifest becomes absolute on the API's origin.", + "An absolute artifact url on the API's origin names the same files route as its " + "root-relative form, so the client asks it as that origin_path and reaches the same " + "dataset.", + _artifact_urls_on(lambda parent: _origin(parent["origin"]["base_url"])), + ), + Synthetic( + "fetch-spec-storage-artifact-url", + "fetch-spec-known-sentence", + f"Every artifact url of the build's manifest becomes absolute on {STORAGE_ORIGIN}, " + "and the exchanges after the build go.", + "An artifact url names a files route, which is on the API's origin; one on the " + "storage host raises ContractError contract_violation before any request for the " + "file, as on any other origin.", + _artifact_urls_on(lambda parent: STORAGE_ORIGIN), + ), + Synthetic( + "fetch-spec-manifest-without-identity", + "fetch-spec-known-sentence", + "The build's manifest definition loses identity, and the exchanges after it go.", + "A manifest whose definition has no identity, a strict member, raises ContractError " + "contract_violation on the build response, before any download.", + _manifest_without("identity"), + ), + Synthetic( + "fetch-spec-manifest-without-schema-version", + "fetch-spec-known-sentence", + "The build's manifest definition loses schema_version, and the exchanges after it " + "go.", + "A manifest whose definition has no schema_version, a strict member, raises " + "ContractError contract_violation on the build response, before any download, so " + "a ref never holds a definition without one.", + _manifest_without("schema_version"), + ), + Synthetic( + "operation-failed-without-error", + "operation-resume", + "The resumed operation's first poll answers it failed with no error member.", + "A failed operation whose resource carries no error raises ServerError with the code " + "operation_failed; a resumed operation holds no build request, so nothing is posted " + "again.", + _failed_without_error, + ), + Synthetic( + "newest-version-unreadable-page", + "fetch-ref-newest-version", + "The versions page names its versions list items.", + "A versions page with no versions list raises ContractError contract_violation, " + "since only a NotFoundError reads as no stored version.", + _versions_renamed, + ), + Synthetic( + "search-sunset-warning", + "search-place-ambiguous", + f"The search is made twice, and each response carries Sunset {SUNSET!r} with no " + "Deprecation header.", + "A Sunset header alone issues the route_deprecated warning, once per process per " + "distinct value, so the second search, whose response carries the same value, " + "warns nothing.", + _sunset_twice, + ), + Synthetic( + "search-server-warning", + "search-place-ambiguous", + "The search is made three times. Its responses carry x-dfo-warning " + f"{SERVER_MESSAGE!r}, then the same with Sunset {SUNSET!r}, then " + f"{OTHER_SERVER_MESSAGE!r} with Deprecation {DEPRECATION!r} and the same Sunset.", + "An x-dfo-warning header issues server_warning once per process per message, and " + "Deprecation and Sunset issue route_deprecated once per distinct pair of their " + "values: the second search warns route_deprecated alone, and the third, a new pair " + "and a new message, warns both.", + _server_warnings, + ), + Synthetic( + "answer-part-status-not-a-string", + "answer-mixed-fetch-raises", + "Part 1's status becomes the number 7, and the fetch goes.", + "A part whose status is not a string raises ContractError contract_violation at " + "/parts/1/status, where an unknown string status is an unknown gap.", + _search_ends(_status_a_number, "contract_violation"), + ), + Synthetic( + "answer-definition-spec-id-mismatch", + "answer-definite-fetch", + f"Part 0's spec definition names spec_id {UNKNOWN_SPEC_ID}, and the fetch goes.", + "A Search spec whose definition.spec_id differs from its spec_id raises ContractError " + "contract_violation, in a Search response as in a ref.", + _search_ends(_definition_spec_id_differs, "contract_violation"), + ), + Synthetic( + "answer-spec-without-identity", + "answer-definite-fetch", + "Part 0's spec definition loses identity, and the fetch goes.", + "A Search spec whose definition has no identity, which a client posts back, raises " + "ContractError contract_violation.", + _search_ends(_spec_without("identity"), "contract_violation"), + ), + Synthetic( + "answer-spec-without-resolved", + "answer-definite-fetch", + "Part 0's spec loses resolved, and the fetch goes.", + "A Search spec with no resolved, whose entity_groups a client reads, raises " + "ContractError contract_violation.", + _search_ends(_spec_without("resolved"), "contract_violation"), + ), + Synthetic( + "answer-nested-specs-unchecked", + "choose-place-one-part", + "The no_data part's flagged_match and alternate_match, and the chosen spec's " + "resolved.equivalent_readings, hold the chosen spec without resolved and without " + "its definition's identity.", + "A client checks strict members only where a rule reads them, so a Spec in " + "no_data.flagged_match, no_data.alternate_match or resolved.equivalent_readings may " + "lack resolved and identity, and the search and the choice reach the same answers.", + _nested_specs_unchecked, + ), + Synthetic( + "answer-folded-parts-unnamed", + "answer-several-readings-folded", + "The first folded part loses its variable_text and the second's becomes an empty " + "string.", + "A definite part whose variable_text is absent or empty adds nothing to its " + "member's parts, so the member that answers both names no part and its rows' part " + "value is its sentence.", + _folded_parts_unnamed, + ), + Synthetic( + "answer-candidate-specs-not-a-list", + "answer-candidates-choose-fetch", + "Part 0's candidates.specs becomes an object keyed by index, and the choice and " + "fetch go.", + "A strict member of a JSON type its schema does not admit raises ContractError " + "contract_violation at its pointer, /parts/0/candidates/specs, as a missing one " + "does.", + _search_ends(_specs_an_object, "contract_violation"), + ), + Synthetic( + "answer-operations-not-a-list", + "answer-definite-fetch", + "Part 0's operations becomes one operation object in place of a list.", + "A member a client reads that no strict pointer names, and that holds a JSON type " + "other than its schema's, reads as absent: the part has no operation, and the " + "fetch issues no SearchWarning and reaches the same dataset.", + _operations_an_object, + ), + Synthetic( + "answer-empty-parts", + "search-place-ambiguous", + "The answer's parts become [].", + "A resolution with no parts, which the served schema gives at least one, raises " + "ContractError contract_violation at /parts.", + _search_ends(_no_parts, "contract_violation"), + ), + Synthetic( + "search-body-not-an-object", + "search-place-ambiguous", + "The Search response body becomes a list holding the answer.", + "A Search response body that is not an object raises ContractError " + "contract_violation.", + _search_ends(_not_an_object, "contract_violation"), + ), + Synthetic( + "search-refused-without-code", + "search-place-ambiguous", + f"A 503 problem document with no code, retryable false and trace_id {BODY_TRACE_ID} " + f"answers the search, with x-dfo-trace-id {HEADER_TRACE_ID}.", + "A problem document with no code raises refusal_without_code with the class its " + "status maps to, and keeps its body's retryable and trace_id, so a retryable false " + "503 is not retried and its trace id is the body's, not the header's.", + _refused_without_code, + ), + Synthetic( + "search-unauthorized", + "search-place-ambiguous", + f"A bodiless 401 with x-dfo-trace-id {HEADER_TRACE_ID} answers the search.", + "A 401 resolves the key again; the key is unchanged, so the client sends nothing " + "more and raises AuthenticationError refusal_without_code, whose trace id is the " + "header's, since the refusal has no body.", + _unauthorized, + ), + Synthetic( + "choose-echoes-separate-and-operations", + "choose-option-beside-definite", + f"Part 0, the definite part, carries separate true and the operation {GROWTH}.", + "A definite part's identity entry echoes the part's separate flag when it is true " + "and its operations when it has any.", + _choice_posted(_separate_with_operation), + ), + Synthetic( + "choose-echo-drops-malformed-items", + "choose-candidate-echoes-assumptions", + "The definite part's operations hold 42, an operation whose verb is a number " + "and one whose over and target_year are not read, its assumptions gain a " + "string, an assumption whose text is null and one with a number among its refs " + "and an unknown member, and the chosen candidate's reading_assumptions hold 7 " + "and an assumption whose text is null.", + "An item that is not an object, or whose required members are not strings, " + "reads as absent, and an item reads as its schema's members of the types they " + "admit, so each echoed operations and assumptions list posts its read forms: " + "rank without over or target_year and the growth operation, the definite part's " + "own assumption and the grants assumption with its string ref alone, and the " + "chosen candidate's empty list, as none of its items reads.", + _echo_drops_malformed, + ), + Synthetic( + "choose-posts-unsupported-placeholder", + "choose-option-beside-definite", + "Part 0 becomes an unsupported part with code scope_too_broad and no restatement.", + "A part that is unsupported and has no restatement posts a placeholder entry with " + "its unsupported code and variable_text.", + _choice_posted(_definite_unsupported), + ), + Synthetic( + "choose-refused-unknown-status", + "choose-option-beside-definite", + 'Part 0 takes the status "deferred" and loses its restatement.', + "A part of a status the client does not know, with no restatement, cannot be posted " + "back, so the choice raises InvalidRequestError with no request.", + _choice_raises("choice_invalid", _definite_deferred), + ), + Synthetic( + "choose-refused-part-without-variable-text", + "choose-option-beside-definite", + "Part 0, the definite part, loses its variable_text.", + "An identity entry carries its part's variable_text, so a part without one cannot " + "be posted back and the choice raises InvalidRequestError with no request.", + _choice_raises("choice_invalid", _definite_unnamed), + ), + Synthetic( + "choose-refused-shared-label", + "choose-place-one-part", + "The no_data part's second option takes the first one's label, and the search's " + f"response carries x-dfo-trace-id {ANSWER_TRACE_ID}.", + "A label two options share matches several, so choosing by it raises " + "InvalidRequestError with no request. The error describes the caller's choice, so " + "it carries no trace id although the answer's response has one.", + _choice_raises( + "choice_invalid", _labels_shared, {"x-dfo-trace-id": ANSWER_TRACE_ID} + ), + ), + Synthetic( + "choose-option-two-part-query", + "choose-place-one-part", + "The chosen option's data_query holds its one part twice.", + "A chosen option whose data_query holds other than one part raises ContractError " + "contract_violation before any request, in a one-part answer as in a several-part " + "one.", + _choice_raises("contract_violation", _two_part_query), + ), + Synthetic( + "search-no-json-body", + "search-place-ambiguous", + f"The search answers 200 with an empty text/html body and x-dfo-trace-id " + f"{READ_TRACE_ID}.", + "A 2xx Search response with no JSON body raises ContractError unexpected_response, " + "with that response's trace id.", + _search_ends(_without_json, "unexpected_response"), + ), + Synthetic( + "choose-option-without-data-query", + "choose-place-one-part", + "The no_data part's first option loses its data_query.", + "Choosing an option with no data_query in a one-part answer raises ContractError " + "contract_violation with no request, as in a several-part answer.", + _choice_without_data_query, + ), + Synthetic( + "fetch-spec-empty-narrowing", + "fetch-spec-known-sentence", + "The fetch names entities {} and facets {}.", + "An empty entities or facets map narrows nothing, so the build posts no scope, as a " + "fetch that names neither does.", + _empty_narrowing, + ), + Synthetic( + "answer-unknown-part-status", + "answer-mixed-fetch-raises", + 'Part 1\'s status becomes "deferred", a status no client knows.', + "A part status the client does not know parses as an unknown part, counts as an " + "unknown gap with no options, and makes fetching the answer raise " + "IncompleteAnswerError.", + _answer_edit(_deferred), + ), + Synthetic( + "answer-unknown-enum-value", + "search-place-ambiguous", + 'The no_data part\'s category becomes "undetermined", a value the served enum lacks.', + "An enum value the client does not know passes through untouched and changes no " + "outcome.", + _unknown_enum_value, + ), + Synthetic( + "fetch-null-member", + "answer-definite-fetch", + "The manifest's status column distinct flips between left out and served as null.", + "An optional member that admits null may be left out or served as null; a client " + "reads both as " + "null, and neither changes the outcome. The recording and this record carry the two " + "forms of the status column's distinct.", + _null_member, + ), + Synthetic( + "fetch-renamed-strict-field", + "answer-definite-fetch", + "The build's manifest names content_version contentVersion, and the exchanges after it go.", + "A manifest without content_version, a strict field, raises ContractError on the build " + "response, before any download.", + _renamed_strict_field, + ), + Synthetic( + "answer-timed-out", + "answer-mixed-fetch-raises", + "The answer's diagnostics.timed_out becomes true, and its response carries " + f"x-dfo-trace-id {ANSWER_TRACE_ID}.", + "A no_data part of an answer whose diagnostics say Search timed out is a timed_out gap, " + "whatever its reason, and fetching the answer raises IncompleteAnswerError, which " + "describes the answer and carries its response's trace id.", + _answer_edit(_timed_out, {"x-dfo-trace-id": ANSWER_TRACE_ID}), + ), + Synthetic( + "answer-unsupported-part", + "answer-mixed-fetch-raises", + "Part 1 becomes an unsupported part with code scope_too_broad.", + "An unsupported part is an unsupported gap with no options, and fetching the answer " + "raises IncompleteAnswerError.", + _answer_edit(_unsupported), + ), + Synthetic( + "answer-unknown-kind", + "search-place-ambiguous", + 'The answer\'s kind becomes "verdict", a kind no client knows.', + "A search response whose kind the client does not know raises ContractError, since the " + "client cannot read the answer.", + _unknown_kind, + ), + Synthetic( + "fetch-partial-nothing-answered", + "search-place-ambiguous", + "A partial fetch of the answer follows the search.", + "A partial fetch of an answer in which no part has a reading raises " + "IncompleteAnswerError with no request.", + _partial_nothing_answered, + ), + Synthetic( + "fetch-strict-info-notice", + "answer-definite-fetch", + "Part 0 carries an info-severity warning, and the fetch is strict.", + "An info-severity warning issues no SearchWarning, so a strict fetch of the answer " + "builds the same dataset.", + _strict_info_notice, + ), + Synthetic( + "choose-refused-no-choice", + "answer-definite-fetch", + "A choice of option 0 follows the search.", + "Choosing on an answer in which no part awaits a choice raises InvalidRequestError " + "with no request.", + _choice_refused(0), + ), + Synthetic( + "choose-refused-two-choices", + "search-two-parts-place-ambiguous", + "A choice of option 0, naming no part, follows the search.", + "Choosing without naming a part when two parts await a choice raises " + "InvalidRequestError with no request.", + _choice_refused(0), + ), + Synthetic( + "choose-refused-no-options", + "search-place-ambiguous", + "The no_data part's options go, and a choice of option 0 follows the search.", + "Choosing in a choice gap that offers no options raises InvalidRequestError with no " + "request.", + _choice_refused(0, edit=_without_options), + ), + Synthetic( + "choose-candidate-assumed-reading", + "answer-candidates-choose-fetch", + "The picked reading's reading_assumptions entry holds one declared default, the pick " + "echoes it, Search's answer states it, and the fetch goes.", + "Picking a candidate whose reading_assumptions entry holds an assumption posts that " + "list unchanged as the identity entry's assumptions. The picked answer's assumptions " + 'and its sentence, closed by the assumption clause ("Assumed: official development ' + "assistance.\"), are Search's response, which the client takes as it stands.", + _picked_reading_assumes, + ), + Synthetic( + "choose-refused-option-out-of-range", + "answer-candidates-choose-fetch", + "A choice of candidate 3 follows the search.", + "Choosing candidate 3 of three raises InvalidRequestError with no request.", + _choice_refused(3), + ), + Synthetic( + "choose-refused-unknown-label", + "search-place-ambiguous", + 'A choice of "Congo [Nowhere]" follows the search.', + "Choosing an option by a label no option has raises InvalidRequestError with no " + "request.", + _choice_refused("Congo [Nowhere]"), + ), + Synthetic( + "choose-candidate-by-label", + "answer-candidates-choose-fetch", + "The choice names candidate 0 by its label.", + "A candidate is chosen by its label, the heading of its sentence plan, as by its " + "index: the choice posts the same identity entry and reaches the same answer.", + _candidate_by_label, + ), + Synthetic( + "choose-refused-unknown-candidate-label", + "answer-candidates-choose-fetch", + 'A choice of "Germany\'s net lending" follows the search.', + "Choosing a candidate by a label no candidate has raises InvalidRequestError " + "with no request.", + _choice_refused("Germany's net lending"), + ), + Synthetic( + "choose-refused-shared-candidate-label", + "answer-candidates-choose-fetch", + "Candidate 1 takes candidate 0's sentence plan, and the choice names their shared " + "label.", + "A label two candidates share matches several, so choosing by it raises " + "InvalidRequestError with no request.", + _candidate_label_shared, + ), + Synthetic( + "choose-refused-answered-part", + "answer-mixed-fetch-raises", + "A choice of option 0 on part 0, which has a reading, follows the search.", + "Choosing on a part that already has a reading raises InvalidRequestError with no " + "request.", + _choice_refused(0, 0), + ), + Synthetic( + "choose-refused-unknown-part", + "answer-mixed-fetch-raises", + 'A choice of option 0 on part "rainfall" follows the search.', + "Naming a part by words that are neither a part's variable text nor a word its " + "options mention raises InvalidRequestError with no request.", + _choice_refused(0, "rainfall"), + ), + Synthetic( + "choose-refused-mention-names-two-parts", + "search-two-parts-place-ambiguous", + 'A choice of "Congo [DRC]" on part "Congo" follows the search.', + 'Naming a part by "Congo", a word both parts\' options mention, raises ' + "InvalidRequestError with no request.", + _choice_refused("Congo [DRC]", "Congo"), + ), +) + + +# --- writing and running ---------------------------------------------------- + + +def _now() -> str: + return datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%SZ") + + +def _record( + name: str, description: str, origin: dict[str, Any], derived: Derived +) -> dict[str, Any]: + return { + "format_version": 1, + "name": name, + "description": description, + "origin": origin, + "call": derived.call, + "exchanges": derived.exchanges, + "expect": derived.expect, + } + + +def write_record( + directory: Path, record: dict[str, Any], bodies: Mapping[str, bytes] +) -> None: + """Writes `record` and its bodies, removing the body files of its own an + earlier record of the same name named. A parent's body file it names + stays. Every body file it removes or writes is checked by `body_path` + before any is touched, so a bad name or a symlink changes nothing.""" + path = directory / f"{record['name']}.json" + stale = [] + if path.exists(): + old = json.loads(path.read_text(encoding="utf-8")) + for exchange in old["exchanges"]: + body_file = exchange["response"].get("body_file") + if body_file and owns_body_file(record["name"], body_file): + stale.append(body_path(directory, body_file)) + written = {body_path(directory, name): data for name, data in bodies.items()} + for body in stale: + body.unlink(missing_ok=True) + for body, data in written.items(): + body.write_bytes(data) + _write_json(path, record) + + +def _refuse_local_host(record: dict[str, Any], base_url: str) -> None: + """Refuses a record holding an absolute URL other than a redacted signed + URL on the storage host, or a `location` under `base_url`, as + `absolute_url_problems` finds them. A local app's host, under any name + or port, is one no deployed client can fetch.""" + if problems := absolute_url_problems(record, base_url): + raise SystemExit("\n".join(problems)) + + +def record_recorded(definition: Recorded, ctx: Context, directory: Path) -> None: + recorded_at = _now() + session = ctx.session(definition.name) + definition.run(session, ctx) + if session.recorder.canned_served: + raise SystemExit( + f"{definition.name}: a recorded scenario holds only exchanges the server made, " + f"and {session.recorder.canned_served} were canned" + ) + commits = session.recorder.commits + if len(commits) != 1 or not re.fullmatch(r"[0-9a-f]{40}", next(iter(commits))): + raise SystemExit( + f"{definition.name}: the responses' x-dfo-commit headers name " + f"{sorted(commits)}, not one commit; start a local app with " + "DFO_BUILD_COMMIT set to its checkout's commit" + ) + origin = { + "kind": "recorded", + "base_url": ctx.base_url, + "dfo_commit": commits.pop(), + "recorded_at": recorded_at, + } + derived = Derived(session.call, session.recorder.exchanges, session.expect) + record = _record(definition.name, definition.description, origin, derived) + _refuse_local_host(record, ctx.base_url) + write_record(directory, record, session.recorder.bodies) + + +def record_synthetic(definition: Synthetic, ctx: Context, directory: Path) -> None: + parent_path = directory / f"{definition.derived_from}.json" + parent = json.loads(parent_path.read_text(encoding="utf-8")) + derived = definition.derive(parent, replace(ctx, transport=_offline)) + origin = { + "kind": "synthetic", + "derived_from": definition.derived_from, + "edit": definition.edit, + } + record = _record(definition.name, definition.description, origin, derived) + _refuse_local_host(record, parent["origin"]["base_url"]) + write_record(directory, record, derived.bodies) + + +def binary_total(directory: Path) -> int: + return sum( + p.stat().st_size + for p in directory.iterdir() + if p.is_file() and p.suffix != ".json" + ) + + +def _rows(path: Path) -> dict[str, dict[str, Any]]: + rows = json.loads(path.read_text(encoding="utf-8"))["codes"] + return {row["code"]: row for row in rows} + + +def load_actions(package_dir: Path) -> dict[str, dict[str, Any]]: + return _rows(package_dir / "actions.json") + + +def load_client_codes(package_dir: Path) -> dict[str, dict[str, Any]]: + return _rows(package_dir / "client-codes.json") + + +class Served: + """A transport serving one record's exchanges in order, its binary bodies + read from `body_dir`. A request the record does not hold next raises + `ValueError`.""" + + def __init__(self, record: dict[str, Any], body_dir: Path) -> None: + self.name = record["name"] + self.base_url = record["origin"].get("base_url", DEV_BASE_URL) + self.body_dir = body_dir + self.pending = copy.deepcopy(record["exchanges"]) + + def __call__( + self, + method: str, + url: str, + *, + body: bytes | None, + headers: Mapping[str, str], + timeout: float, + ) -> Response: + if not self.pending: + raise ValueError(f"{self.name}: {method} {url} follows the last exchange") + request, response = self.pending[0]["request"], self.pending[0]["response"] + if "url" in request: + target, sent = request["url"], redact_external_url(url) + if headers: + raise ValueError(f"{self.name}: a signed download carries headers") + elif "origin_path" in request: + target, sent = _origin(self.base_url) + request["origin_path"], url + else: + target, sent = self.base_url + request["path"], url + posted = json.loads(body) if body else None + if (method, sent, posted) != (request["method"], target, request.get("json")): + raise ValueError( + f"{self.name}: {method} {sent} is not the next exchange, " + f"{request['method']} {target}" + ) + self.pending.pop(0) + if "json" in response: + data = json.dumps(response["json"]).encode() + elif "body_file" in response: + # A refused body file is the record's fault, which recording live + # would not mend, so it ends the run past `drive`'s advice. + try: + path = body_path(self.body_dir, response["body_file"]) + except ValueError as exc: + raise SystemExit(f"{self.name}: {exc}") from exc + data = path.read_bytes() + else: + data = b"" + return Response(response["status"], dict(response.get("headers", {})), data) + + +def _offline(method: str, url: str, **_: Any) -> Response: + raise SystemExit(f"this derivation makes no request, and it sent {method} {url}") + + +def drive(session: Session, call: Sequence[dict[str, Any]]) -> None: + """Runs a record's steps through `session`.""" + answer = None + for step in call: + match step: + case {"op": "search", "question": question}: + answer = session.search(question) + case {"op": "choose", "option": option}: + if answer is None: + raise ValueError("a choice follows no answer") + answer = session.choose(answer, option, part=step.get("part")) + case {"op": "fetch", "spec": spec}: + window = step.get("window") + session.fetch_spec( + _step_spec(spec), + window=tuple(window) if isinstance(window, list) else window, + entities=step.get("entities"), + facets=step.get("facets"), + layout=step.get("layout"), + strict=step.get("strict", False), + ) + case {"op": "fetch", "ref": ref}: + session.fetch_ref(ref) + case {"op": "newest_version", "spec": spec}: + session.newest_version(_step_spec(spec)) + case {"op": "fetch"}: + if answer is None: + raise ValueError("a fetch of an answer follows no answer") + session.fetch_answer( + answer, + partial=step.get("partial", False), + strict=step.get("strict", False), + layout=step.get("layout"), + ) + case {"op": "mint", "spec": spec}: + session.mint( + _step_spec(spec), + layout=step.get("layout"), + ) + case {"op": "operation", "operation_id": operation_id}: + session.resume(operation_id, layout=step.get("layout")) + case {"op": "result"}: + session.result() + + +def rederive_recorded(name: str, ctx: Context, directory: Path) -> None: + """Derives a recorded scenario's `expect` again from its own steps over + its own exchanges, with no request, and keeps the rest of the record.""" + path = directory / f"{name}.json" + if not path.exists(): + raise SystemExit(f"{name}: no record to derive from; record it live") + record = json.loads(path.read_text(encoding="utf-8")) + served = Served(record, directory) + session = Session( + Recorder(name, served.base_url, served), + ctx.actions, + ctx.client_codes, + read_shape=ctx.read_shape, + sleep=lambda _: None, + ) + try: + drive(session, record["call"]) + except (ValueError, ShapeError) as exc: + raise SystemExit(f"{name}: {exc}; record it live") from exc + unchanged = ( + not served.pending + and session.call == record["call"] + and session.recorder.exchanges == record["exchanges"] + ) + if not unchanged: + raise SystemExit(f"{name}: its steps no longer make its exchanges") + write_record( + directory, {**record, "expect": session.expect}, session.recorder.bodies + ) + + +def run_record(args: argparse.Namespace) -> int: + package_dir: Path = args.package_dir + directory: Path = args.scenarios_dir or package_dir / "scenarios" + names = {d.name for d in (*RECORDED, *SYNTHETIC)} + unknown = set(args.only or ()) - names + if unknown: + raise SystemExit(f"no scenario is named {sorted(unknown)}") + chosen = set(args.only or names) + ctx = Context( + args.base_url, + _offline if args.offline else urllib_transport, + load_actions(package_dir), + load_client_codes(package_dir), + ) + count = 0 + for definition in RECORDED: + if definition.name not in chosen: + continue + if args.offline: + print(f"deriving {definition.name} from its record", flush=True) + rederive_recorded(definition.name, ctx, directory) + else: + print(f"recording {definition.name}", flush=True) + record_recorded(definition, ctx, directory) + count += 1 + for synthetic in SYNTHETIC: + if synthetic.name in chosen: + print(f"deriving {synthetic.name}", flush=True) + record_synthetic(synthetic, ctx, directory) + count += 1 + total = binary_total(directory) + print(f"{count} scenario(s) written; binary bodies {total:,} bytes") + if count == 0: + return 1 + if total > BINARY_BUDGET: + print(f"binary bodies pass the {BINARY_BUDGET:,}-byte budget", file=sys.stderr) + return 1 + if args.scenarios_dir is not None: + return 0 + return validate_main() + + +def run_openapi(args: argparse.Namespace) -> int: + checkout = args.dfo_apis.resolve() + document, commit = capture_openapi(checkout) + write_served( + args.package_dir, document, commit, "dfo_apis.app.create_app() in process" + ) + print(f"served/openapi.json captured from {REPOSITORY} at {commit}") + return 0 + + +def main(argv: Sequence[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__.split("\n\n")[0]) + parser.add_argument("--package-dir", type=Path, default=PACKAGE_DIR) + commands = parser.add_subparsers(dest="command", required=True) + openapi = commands.add_parser("openapi", help="capture served/openapi.json") + openapi.add_argument( + "--dfo-apis", type=Path, required=True, help="a dfo-apis checkout" + ) + record = commands.add_parser("record", help="record the scenarios") + record.add_argument("--base-url", default=DEV_BASE_URL) + record.add_argument("--only", nargs="+", metavar="NAME") + record.add_argument( + "--offline", + action="store_true", + help="derive each outcome again from the records, with no request", + ) + record.add_argument( + "--scenarios-dir", + type=Path, + help="write here, outside the package, unvalidated", + ) + args = parser.parse_args(argv) + return run_openapi(args) if args.command == "openapi" else run_record(args) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/tests/conftest.py b/tools/tests/conftest.py new file mode 100644 index 0000000..6af09f2 --- /dev/null +++ b/tools/tests/conftest.py @@ -0,0 +1,7 @@ +"""Puts `tools/` on the import path, where `capture_client_contract.py` +imports `validate_client_contract` from when it runs as a script.""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) diff --git a/tools/tests/test_capture_client_contract.py b/tools/tests/test_capture_client_contract.py new file mode 100644 index 0000000..f51bc5d --- /dev/null +++ b/tools/tests/test_capture_client_contract.py @@ -0,0 +1,536 @@ +"""Tests for tools/capture_client_contract.py. + +The recorder's client reproduces each packaged record from the record's own +steps and responses, every derived record follows from its parent, and the +writers keep the kit's JSON formatting. No test reaches the network or needs +pyarrow: a fake transport serves the recorded responses, and the Parquet shape +reader is replaced, so rows and columns are the one part of a dataset outcome +these tests leave to the recording. + +Run with: uv run --with jsonschema --with pytest pytest tools/tests -q +""" + +from __future__ import annotations + +import copy +import importlib.util +import json +import subprocess +import sys +from collections.abc import Callable, Mapping +from pathlib import Path +from typing import Any + +import pytest + +_MODULE_PATH = Path(__file__).resolve().parent.parent / "capture_client_contract.py" +_spec = importlib.util.spec_from_file_location("capture_client_contract", _MODULE_PATH) +capture = importlib.util.module_from_spec(_spec) +sys.modules["capture_client_contract"] = capture +_spec.loader.exec_module(capture) + +SCENARIOS = capture.PACKAGE_DIR / "scenarios" +ACTIONS = capture.load_actions(capture.PACKAGE_DIR) +CLIENT_CODES = capture.load_client_codes(capture.PACKAGE_DIR) + + +def _load(name: str) -> dict[str, Any]: + return json.loads((SCENARIOS / f"{name}.json").read_text(encoding="utf-8")) + + +def _records(kind: str) -> list[str]: + return sorted( + p.stem + for p in SCENARIOS.glob("*.json") + if json.loads(p.read_text(encoding="utf-8"))["origin"]["kind"] == kind + ) + + +def _shape(data: bytes) -> tuple[int, list[str]]: + return len(data), ["column"] + + +def _without_shapes(expect: list[dict[str, Any]]) -> list[dict[str, Any]]: + expect = copy.deepcopy(expect) + for outcome in expect: + if "dataset" in outcome: + dataset = outcome["dataset"] + del dataset["rows"], dataset["columns"] + for entry in dataset.get("part_rows", []): + del entry["rows"] + return expect + + +def test_every_record_has_a_definition_and_every_definition_a_record() -> None: + for kind, definitions in ( + ("recorded", capture.RECORDED), + ("synthetic", capture.SYNTHETIC), + ): + assert sorted(d.name for d in definitions) == _records(kind) + + +@pytest.mark.parametrize("name", _records("recorded")) +def test_the_recorder_reproduces_each_record_from_its_steps(name: str) -> None: + record = _load(name) + served = capture.Served(record, SCENARIOS) + recorder = capture.Recorder(name, served.base_url, served) + session = capture.Session( + recorder, ACTIONS, CLIENT_CODES, read_shape=_shape, sleep=lambda _: None + ) + capture.drive(session, record["call"]) + assert served.pending == [], "the client skipped a recorded exchange" + assert session.call == record["call"] + assert recorder.exchanges == record["exchanges"] + assert _without_shapes(session.expect) == _without_shapes(record["expect"]) + + +def test_a_recorder_keeps_bodies_redacts_signed_urls_and_names_the_commit() -> None: + signed = "https://storage.example/bucket/sha256%3Aab?X-Goog-Algorithm=GOOG4&X-Goog-Signature=f00" + replies = [ + capture.Response( + 302, + { + "location": signed, + "x-dfo-commit": "a" * 40, + "x-dfo-trace-id": "t" * 32, + "server": "x", + }, + b"", + ), + capture.Response( + 200, {"content-type": "application/vnd.apache.parquet"}, b"PAR1" + ), + capture.Response( + 200, {"content-type": "application/vnd.apache.parquet"}, b"PAR2" + ), + ] + sent: list[Mapping[str, str]] = [] + + def transport(method: str, url: str, **kwargs: Any) -> Any: + sent.append(kwargs["headers"]) + return replies.pop(0) + + recorder = capture.Recorder("some-name", "http://127.0.0.1:8000/api", transport) + location = recorder.origin("GET", "/api/datasets/x/y/files/z").headers["location"] + recorder.external(location) + recorder.external(location) + redacted = "https://storage.example/bucket/sha256%3Aab?X-Goog-Signature=redacted" + assert recorder.exchanges[0]["response"] == { + "status": 302, + "headers": {"location": redacted, "x-dfo-trace-id": "t" * 32}, + } + assert recorder.exchanges[1]["request"] == {"method": "GET", "url": redacted} + assert [e["response"]["body_file"] for e in recorder.exchanges[1:]] == [ + "some-name.parquet", + "some-name-2.parquet", + ] + assert recorder.bodies == { + "some-name.parquet": b"PAR1", + "some-name-2.parquet": b"PAR2", + } + assert recorder.commits == {"a" * 40} + assert sent[1:] == [{}, {}] + + +@pytest.mark.parametrize( + ("headers", "refused"), + [ + ({}, True), + ({"cache-control": "no-store"}, True), + ({"cache-control": "public, max-age=60"}, False), + ({"x-dfo-trace-id": "t" * 32}, False), + ], + ids=["untraced", "untraced-private", "shared-cacheable", "traced"], +) +def test_a_recorder_refuses_an_api_response_without_a_trace_id( + headers: dict[str, str], refused: bool +) -> None: + """The server sends x-dfo-trace-id on every API response but a + shared-cacheable one, so a recording that lacks it would hold an + exchange the server did not make.""" + reply = capture.Response( + 200, {"content-type": "application/json", **headers}, b"{}" + ) + recorder = capture.Recorder( + "some-name", "http://127.0.0.1:8000/api", lambda *_, **__: reply + ) + if refused: + with pytest.raises(SystemExit, match="x-dfo-trace-id"): + recorder.api("GET", "/search/healthz") + else: + assert recorder.api("GET", "/search/healthz").status == 200 + + +@pytest.mark.parametrize( + ("url", "expected"), + [ + ( + "https://storage.googleapis.com/b/o?X-Goog-Algorithm=A&X-Goog-Signature=s", + "https://storage.googleapis.com/b/o?X-Goog-Signature=redacted", + ), + ( + "https://storage.googleapis.com/b/o?GoogleAccessId=sa%40p.iam.gserviceaccount.com&Signature=s", + "https://storage.googleapis.com/b/o?X-Goog-Signature=redacted", + ), + ( + "https://storage.googleapis.com/b/o", + "https://storage.googleapis.com/b/o?X-Goog-Signature=redacted", + ), + ( + "/api/datasets/operations/op_1?page=2", + "/api/datasets/operations/op_1?page=2", + ), + ( + "http://127.0.0.1:19493/__e2e__/blob/e2e-working/sha256:ab?response_type=x", + "https://storage.googleapis.com/e2e-working/sha256%3Aab?X-Goog-Signature=redacted", + ), + ], + ids=["v4-signed", "v2-signed", "no-query", "root-relative", "local-blob"], +) +def test_every_absolute_url_loses_its_query(url: str, expected: str) -> None: + assert capture.redact_external_url(url) == expected + + +@pytest.mark.parametrize( + ("location", "refused"), + [ + ("http://127.0.0.1:19493/__e2e__/blob/b/o?X-Goog-Signature=redacted", True), + ("http://localhost:19493/b/o?X-Goog-Signature=redacted", True), + ("http://127.0.0.1:4443/b/o?X-Goog-Signature=redacted", True), + ("http://127.0.0.1/b/o?X-Goog-Signature=redacted", True), + ("http://storage.googleapis.com/b/o?X-Goog-Signature=redacted", True), + ("https://storage.googleapis.com/b/o?X-Goog-Signature=redacted", False), + ("http://127.0.0.1:19493/api/datasets/operations/op_1", False), + ("/api/datasets/operations/op_1", False), + ], + ids=[ + "local-signed-url", + "localhost-alias", + "other-port", + "no-port", + "storage-over-http", + "storage-url", + "api-route-under-the-base-url", + "root-relative", + ], +) +def test_a_record_whose_signed_url_names_the_local_host_is_refused( + location: str, refused: bool +) -> None: + exchange = { + "request": {"method": "GET", "path": "/datasets/s/v/file"}, + "response": {"status": 302, "headers": {"location": location}}, + } + record = {"name": "s", "exchanges": [exchange]} + base_url = "http://127.0.0.1:19493/api" + if refused: + with pytest.raises(SystemExit, match="where a record's absolute URL names"): + capture._refuse_local_host(record, base_url) + else: + capture._refuse_local_host(record, base_url) + + +@pytest.mark.parametrize("name", _records("synthetic")) +def test_each_derived_record_follows_from_its_parent(name: str) -> None: + record = _load(name) + definition = next(d for d in capture.SYNTHETIC if d.name == name) + parent = _load(record["origin"]["derived_from"]) + ctx = capture.Context( + capture.DEV_BASE_URL, capture.Served(parent, SCENARIOS), ACTIONS, CLIENT_CODES + ) + derived = definition.derive(copy.deepcopy(parent), ctx) + assert record["origin"]["edit"] == definition.edit + assert record["call"] == derived.call + assert record["exchanges"] == derived.exchanges + assert record["expect"] == derived.expect + + +def test_an_offline_rederivation_rewrites_only_the_expect(tmp_path: Path) -> None: + name = "answer-declined" + for path in SCENARIOS.glob(f"{name}*"): + (tmp_path / path.name).write_bytes(path.read_bytes()) + stale = _load(name) + stale["expect"][1]["error"]["code"] = None + capture.write_record(tmp_path, stale, {}) + ctx = capture.Context( + capture.DEV_BASE_URL, capture._offline, ACTIONS, CLIENT_CODES, read_shape=_shape + ) + capture.rederive_recorded(name, ctx, tmp_path) + fresh = (tmp_path / f"{name}.json").read_text(encoding="utf-8") + assert fresh == (SCENARIOS / f"{name}.json").read_text(encoding="utf-8") + + +@pytest.mark.parametrize("named", ["symlink", "parent", "absolute"]) +def test_an_offline_rederivation_refuses_a_body_file_outside_its_directory( + tmp_path: Path, named: str +) -> None: + """A body file that is a symlink, or a name that leaves the scenarios + directory, is refused before its bytes are read into a record.""" + name = "answer-definite-fetch" + scenarios, outside = tmp_path / "scenarios", tmp_path / "outside.parquet" + scenarios.mkdir() + for path in SCENARIOS.glob(f"{name}.*"): + (scenarios / path.name).write_bytes(path.read_bytes()) + body = scenarios / f"{name}.parquet" + body.rename(outside) + body_file = { + "symlink": body.name, + "parent": f"../{outside.name}", + "absolute": str(outside), + }[named] + if named == "symlink": + body.symlink_to(outside) + record = scenarios / f"{name}.json" + stale = json.loads(record.read_text(encoding="utf-8")) + for exchange in stale["exchanges"]: + if "body_file" in exchange["response"]: + exchange["response"]["body_file"] = body_file + record.write_text(json.dumps(stale), encoding="utf-8") + ctx = capture.Context( + capture.DEV_BASE_URL, capture._offline, ACTIONS, CLIENT_CODES, read_shape=_shape + ) + with pytest.raises(SystemExit) as refused: + capture.rederive_recorded(name, ctx, scenarios) + message = str(refused.value) + assert f"body file {body_file!r}" in message + assert "record it live" not in message + assert json.loads(record.read_text(encoding="utf-8")) == stale + assert body.is_symlink() == (named == "symlink") + + +def test_a_writer_refuses_a_symlinked_body_file(tmp_path: Path) -> None: + outside = tmp_path / "outside.parquet" + outside.write_bytes(b"outside") + scenarios = tmp_path / "scenarios" + scenarios.mkdir() + (scenarios / "s.parquet").symlink_to(outside) + record = {"name": "s", "exchanges": [{"response": {"body_file": "s.parquet"}}]} + with pytest.raises(ValueError, match="symlink"): + capture.write_record(scenarios, record, {"s.parquet": b"new"}) + assert outside.read_bytes() == b"outside" + assert sorted(p.name for p in scenarios.iterdir()) == ["s.parquet"] + + +def test_a_recorder_refuses_a_request_that_is_not_the_next_canned_one() -> None: + def transport(method: str, url: str, **kwargs: Any) -> Any: + raise AssertionError(f"{method} {url} reached the network") + + canned = [ + { + "request": {"method": "GET", "path": "/datasets/a"}, + "response": {"status": 200}, + } + ] + recorder = capture.Recorder("s", capture.DEV_BASE_URL, transport, canned=canned) + with pytest.raises(SystemExit, match="is not the canned request"): + recorder.api("GET", "/datasets/b") + + +def test_a_recorded_scenario_answered_by_a_canned_exchange_is_refused( + tmp_path: Path, +) -> None: + canned = { + "request": {"method": "GET", "path": "/datasets/a"}, + "response": {"status": 200, "json": {}}, + } + + def run(s: Any, ctx: Any) -> None: + s.recorder.canned = [canned] + s.recorder.api("GET", "/datasets/a") + + def transport(method: str, url: str, **kwargs: Any) -> Any: + raise AssertionError(f"{method} {url} reached the network") + + definition = capture.Recorded("s", "None.", run) + ctx = capture.Context(capture.DEV_BASE_URL, transport, ACTIONS, CLIENT_CODES) + with pytest.raises(SystemExit, match="1 were canned"): + capture.record_recorded(definition, ctx, tmp_path) + assert list(tmp_path.iterdir()) == [] + + +def test_a_synthetic_derivation_makes_no_request(tmp_path: Path) -> None: + (tmp_path / "parent.json").write_text(json.dumps({"exchanges": []})) + + def derive(parent: dict[str, Any], ctx: Any) -> Any: + ctx.session("synthetic").search("anything") + + def transport(method: str, url: str, **kwargs: Any) -> Any: + raise AssertionError(f"{method} {url} reached the network") + + definition = capture.Synthetic("s", "parent", "None.", "None.", derive) + ctx = capture.Context(capture.DEV_BASE_URL, transport, ACTIONS, CLIENT_CODES) + with pytest.raises(SystemExit, match="makes no request"): + capture.record_synthetic(definition, ctx, tmp_path) + + +def test_a_renamed_strict_field_ends_the_call_at_the_build() -> None: + record = _load("fetch-renamed-strict-field") + response = record["exchanges"][-1]["response"] + manifest = response["json"] + assert "content_version" not in manifest + assert "contentVersion" in manifest + assert record["expect"][-1] == { + "error": { + "class": "ContractError", + "code": "contract_violation", + "trace_id": response["headers"]["x-dfo-trace-id"], + } + } + + +@pytest.mark.parametrize( + ("timed_out", "status", "expected"), + [ + (False, "no_data", "not_understood"), + (True, "no_data", "timed_out"), + (False, "unsupported", "unsupported"), + (False, "deferred", "unknown"), + ], +) +def test_a_part_without_a_reading_is_a_gap_of_its_kind( + timed_out: bool, status: str, expected: str +) -> None: + body = copy.deepcopy( + _load("answer-mixed-fetch-raises")["exchanges"][0]["response"]["json"] + ) + body["diagnostics"]["timed_out"] = timed_out + body["parts"][1]["status"] = status + gaps = capture.answer_gaps( + capture.answer_from_body(body), capture.gap_kinds(ACTIONS) + ) + assert gaps == [{"part": 1, "kind": expected, "options": 0}] + + +def test_several_members_stack_with_a_part_column_first() -> None: + member = capture.Member( + [], {"spec_id": "spec_a"}, "cv_a", "A.", "sha256:a", 2, ["x", "y"] + ) + other = capture.Member( + [], {"spec_id": "spec_b"}, "cv_b", "B.", "sha256:b", 3, ["y", "z"] + ) + unnamed = capture.Member( + ["p", "q"], {"spec_id": "spec_b"}, "cv_b", "B.", "sha256:b", 3, ["y", "z"] + ) + dataset = capture.dataset_outcome([member, unnamed])["dataset"] + assert dataset["columns"] == ["part", "x", "y", "z"] + assert dataset["rows"] == 5 + assert dataset["part_rows"] == [ + {"part": "A.", "rows": 2}, + {"part": "p; q", "rows": 3}, + ] + assert "part_rows" not in capture.dataset_outcome([other])["dataset"] + assert capture.dataset_outcome([member])["dataset"]["columns"] == ["x", "y"] + + +@pytest.mark.parametrize( + "path", + [ + capture.PACKAGE_DIR / "served" / "openapi.json", + capture.PACKAGE_DIR / "served" / "SOURCE.json", + SCENARIOS / "answer-definite-fetch.json", + ], +) +def test_the_writer_keeps_the_kit_json_formatting(path: Path) -> None: + text = path.read_text(encoding="utf-8") + assert capture.dump_json(json.loads(text)) == text + + +def test_a_rewritten_record_drops_the_body_files_it_no_longer_names( + tmp_path: Path, +) -> None: + def record(*body_files: str) -> dict[str, Any]: + exchanges = [{"response": {"status": 200, "body_file": f}} for f in body_files] + return {"name": "s", "exchanges": exchanges} + + capture.write_record( + tmp_path, + record("s.parquet", "s-2.parquet"), + {"s.parquet": b"1", "s-2.parquet": b"2"}, + ) + (tmp_path / "s-other.parquet").write_bytes(b"kept") + (tmp_path / "parent.parquet").write_bytes(b"kept") + capture.write_record( + tmp_path, record("s.parquet", "parent.parquet"), {"s.parquet": b"3"} + ) + capture.write_record(tmp_path, record("s.parquet"), {"s.parquet": b"3"}) + assert sorted(p.name for p in tmp_path.iterdir()) == [ + "parent.parquet", + "s-other.parquet", + "s.json", + "s.parquet", + ] + assert (tmp_path / "s.parquet").read_bytes() == b"3" + + +def test_the_capture_environment_takes_nothing_else_from_the_caller() -> None: + caller = { + "PATH": "/bin", + "HOME": "/home/x", + "DFO_DATASETS_SURFACE": "0", + "GEMINI_API_KEY": "k", + } + env = capture.capture_env(caller) + assert env["DFO_DATASETS_SURFACE"] == "1" + assert "GEMINI_API_KEY" not in env + assert env["PATH"] == "/bin" + + +def _checkout(path: Path) -> Path: + """A git checkout with one committed file.""" + + def git(*args: str) -> None: + subprocess.run(["git", "-C", str(path), *args], check=True, capture_output=True) + + git("init", "-q") + (path / "f").write_text("a", encoding="utf-8") + git("add", "f") + git("-c", "user.name=t", "-c", "user.email=t@example.com", "commit", "-qm", "f") + return path + + +@pytest.mark.parametrize( + ("change", "refusal"), + [ + ( + lambda p: (p / "f").write_text("b", encoding="utf-8"), + "uncommitted changes or untracked files", + ), + ( + lambda p: (p / "stray.py").write_text("", encoding="utf-8"), + "uncommitted changes or untracked files", + ), + ], + ids=["tracked-change", "untracked-file"], +) +def test_a_checkout_that_is_not_its_commit_is_refused( + tmp_path: Path, change: Callable[[Path], None], refusal: str +) -> None: + checkout = _checkout(tmp_path) + change(checkout) + with pytest.raises(SystemExit, match=refusal): + capture.capture_openapi(checkout) + + +def test_an_environment_out_of_step_with_the_lock_is_refused( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + """uv reports the environment differs, so nothing runs in it.""" + checkout = _checkout(tmp_path) + run = subprocess.run + commands: list[list[str]] = [] + + def fake_run(args: list[str], **kwargs: Any) -> Any: + if args[0] != "uv": + return run(args, **kwargs) + commands.append(args) + return subprocess.CompletedProcess(args, 1, "", "Would install 3 packages") + + monkeypatch.setattr(capture.subprocess, "run", fake_run) + with pytest.raises(SystemExit, match=r"differs from its uv\.lock"): + capture.capture_openapi(checkout) + (command,) = commands + assert command[:2] == ["uv", "sync"] + assert {"--frozen", "--check"} <= set(command) + assert {a for a in command if a.startswith("--extra=")} == { + f"--extra={e}" for e in ("eval", "api", "engine", "datasets", "graph") + } diff --git a/tools/tests/test_validate_client_contract.py b/tools/tests/test_validate_client_contract.py new file mode 100644 index 0000000..c824b32 --- /dev/null +++ b/tools/tests/test_validate_client_contract.py @@ -0,0 +1,2290 @@ +"""Tests for tools/validate_client_contract.py. + +The real contract must validate, and each fault the schemas cannot catch +must be reported: a strict pointer the served document does not hold or holds +as optional or nullable, an action row out of step with the code registry, a +recorded body the served document rejects, a scenario whose steps or body +files do not fit, an outcome its exchanges and actions.json do not give, an +unredacted URL, and a ref example with the wrong verdict. + +Each case validates a whole copy of the contract, the served document's +bodies included, which takes about a third of a second. + +Run with: uv run --with jsonschema --with pytest pytest tools/tests -q +""" + +from __future__ import annotations + +import copy +import importlib.util +import json +import shutil +import sys +from collections.abc import Callable +from pathlib import Path +from typing import Any +from urllib.parse import urlsplit + +import pytest + +_MODULE_PATH = Path(__file__).resolve().parent.parent / "validate_client_contract.py" +_spec = importlib.util.spec_from_file_location("validate_client_contract", _MODULE_PATH) +validator = importlib.util.module_from_spec(_spec) +sys.modules["validate_client_contract"] = validator +_spec.loader.exec_module(validator) + +_SEARCH = "scenarios/search-place-ambiguous.json" +_FETCH = "scenarios/fetch-spec-known-sentence.json" +_MIXED = "scenarios/answer-mixed-fetch-raises.json" +_FOLDED = "scenarios/answer-several-readings-folded.json" +_TOP5 = "scenarios/search-warning-top5.json" +_NO_CHOICE = "scenarios/choose-refused-no-choice.json" +_DECLINED = "scenarios/answer-declined.json" +_REQUEST_INVALID = "scenarios/fetch-spec-request-invalid.json" +_UNKNOWN_VERSION = "scenarios/fetch-ref-unknown-version.json" +_NEWER = "scenarios/fetch-ref-expired-newer-version.json" +_NOT_REPRODUCIBLE = "scenarios/fetch-ref-expired-not-reproducible.json" +_ECHOES = "scenarios/choose-candidate-echoes-assumptions.json" +_REBOUND = "scenarios/fetch-spec-entity-rebound.json" +_DROPPED = "scenarios/fetch-spec-entity-dropped.json" +_GROUP_NARROWED = "scenarios/fetch-spec-group-narrowed.json" +_GROUP_REBOUND = "scenarios/fetch-spec-group-origin-rebound.json" +_ORIGIN_GROUP = {"label": "G7", "group_id": "groups/G7"} + + +def _posted(index: int, change: Callable[[Any], None]) -> Callable[[Any], None]: + """Changes the input the record's second exchange posts.""" + return lambda doc: change( + doc["exchanges"][1]["request"]["json"]["input"]["entries"][index] + ) + + +@pytest.fixture +def package_dir(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> Path: + """A copy of the real contract and registry the test may break.""" + copy = tmp_path / "dfo_client_contract" + shutil.copytree(validator.PACKAGE_DIR, copy) + registry = tmp_path / "codes.json" + shutil.copyfile(validator.REGISTRY_PATH, registry) + monkeypatch.setattr(validator, "PACKAGE_DIR", copy) + monkeypatch.setattr(validator, "REGISTRY_PATH", registry) + return copy + + +def _edit(path: Path, change: Callable[[Any], None]) -> None: + document = json.loads(path.read_text(encoding="utf-8")) + change(document) + path.write_text(json.dumps(document), encoding="utf-8") + + +def test_the_real_contract_is_valid(package_dir: Path) -> None: + assert validator.validate() == [] + assert validator.main() == 0 + + +def _strict(pointer: str) -> Callable[[Any], None]: + return lambda doc: doc["required"].append({"pointer": pointer}) + + +def _drop_action(code: str) -> Callable[[Any], None]: + def change(doc: Any) -> None: + doc["codes"] = [row for row in doc["codes"] if row["code"] != code] + + return change + + +def _add_action(row: dict[str, Any]) -> Callable[[Any], None]: + def change(doc: Any) -> None: + doc["codes"] = sorted([*doc["codes"], row], key=lambda r: r["code"]) + + return change + + +def _set_action(code: str, **fields: Any) -> Callable[[Any], None]: + def change(doc: Any) -> None: + row = next(r for r in doc["codes"] if r["code"] == code) + row.update(fields) + for name, value in fields.items(): + if value is None: + del row[name] + + return change + + +def _retire(code: str) -> Callable[[Any], None]: + def change(doc: Any) -> None: + next(e for e in doc["entries"] if e["code"] == code)["lifecycle"] = "retired" + + return change + + +def _set_body(index: int, change: Callable[[Any], None]) -> Callable[[Any], None]: + return lambda doc: change(doc["exchanges"][index]["response"]["json"]) + + +def _set_property(schema: str, name: str, value: Any) -> Callable[[Any], None]: + return lambda doc: doc["components"]["schemas"][schema]["properties"].update( + {name: value} + ) + + +def _set_outcome(index: int, change: Callable[[Any], None]) -> Callable[[Any], None]: + return lambda doc: change(doc["expect"][index]) + + +def _first_gap(**fields: Any) -> Callable[[Any], None]: + return _set_outcome(0, lambda o: o["answer"]["gaps"][0].update(fields)) + + +def _part_rows(change: Callable[[Any], None]) -> Callable[[Any], None]: + return _set_outcome(1, lambda o: change(o["dataset"])) + + +def _set_step(index: int, **fields: Any) -> Callable[[Any], None]: + return lambda doc: doc["call"][index].update(fields) + + +def _error_code(index: int, code: str | None) -> Callable[[Any], None]: + return _set_outcome(index, lambda o: o["error"].update(code=code)) + + +def _one_hint(body: Any) -> None: + """Leaves the answer's one definite part a single warn warning.""" + part = body["parts"][0] + part["operations"], part["departures"] = [], [] + del part["warnings"][1:] + + +def _refused_without_code(status: int) -> Callable[[Any], None]: + """The snapshot refuses at `status` with a body that carries no code, + and the record expects the 4xx fallback, InvalidRequestError.""" + + def change(doc: Any) -> None: + response = doc["exchanges"][0]["response"] + response["status"] = response["json"]["status"] = status + del response["json"]["code"] + doc["expect"][0] = { + "error": { + "class": "InvalidRequestError", + "code": "refusal_without_code", + "trace_id": response["json"]["trace_id"], + } + } + + return change + + +def _resubmit_answers_built(doc: Any) -> None: + """Search answers the identity resubmit with the built spec_id.""" + built = doc["exchanges"][0]["response"]["json"]["definition"]["spec_id"] + spec = doc["exchanges"][1]["response"]["json"]["parts"][0]["spec"] + spec["spec_id"] = spec["definition"]["spec_id"] = built + + +def _posted_entities(change: Callable[[Any], None]) -> Callable[[Any], None]: + """Changes the entities the record's build posts.""" + return lambda doc: change( + doc["exchanges"][0]["request"]["json"]["input"]["scope"]["entities"] + ) + + +def _rebound_group_kept(doc: Any) -> None: + """The held spec groups origin as well, and the resubmit keeps that group + though the fetch rebinds origin.""" + doc["call"][0]["spec"]["entity_groups"]["origin"] = _ORIGIN_GROUP + entry = doc["exchanges"][1]["request"]["json"]["input"]["entries"][0] + entry["entity_groups"]["origin"] = _ORIGIN_GROUP + + +def _last_response(change: Callable[[Any], None]) -> Callable[[Any], None]: + return lambda doc: change(doc["exchanges"][-1]["response"]) + + +_RETRY_503 = "scenarios/search-retry-after-503.json" + + +def _repeat(index: int, times: int) -> Callable[[Any], None]: + """Exchange `index` answers `times` more times before the next one.""" + + def change(doc: Any) -> None: + exchange = doc["exchanges"][index] + for _ in range(times): + doc["exchanges"].insert(index, copy.deepcopy(exchange)) + + return change + + +def _refused_400(doc: Any) -> None: + """The first search is refused 400 request_invalid, then answered.""" + doc["exchanges"][0]["response"]["json"].update( + type="/codes/request_invalid", + title="Bad Request", + status=400, + code="request_invalid", + retryable=False, + ) + doc["exchanges"][0]["response"]["status"] = 400 + + +def _swap_builds(doc: Any) -> None: + """The two builds post each other's input.""" + first, second = doc["exchanges"][1]["request"], doc["exchanges"][4]["request"] + first["json"]["input"], second["json"]["input"] = ( + second["json"]["input"], + first["json"]["input"], + ) + + +def _poll_other_operation(doc: Any) -> None: + for exchange in doc["exchanges"]: + if exchange["request"].get("path", "").startswith("/datasets/operations/"): + exchange["request"]["path"] = "/datasets/operations/op_" + "f" * 64 + + +def _made_up_code(doc: Any) -> None: + doc["exchanges"][0]["response"]["json"]["code"] = "made_up_code" + doc["expect"][0]["error"]["code"] = "made_up_code" + + +def _drop_paths(prefix: str) -> Callable[[Any], None]: + def change(doc: Any) -> None: + for path in [p for p in doc["paths"] if p.startswith(prefix)]: + del doc["paths"][path] + + return change + + +def _versions_forbidden(response: Any) -> None: + """The versions route refuses 403 publish_not_permitted.""" + response.update( + status=403, + json={ + "type": "/codes/publish_not_permitted", + "title": "Forbidden", + "status": 403, + "detail": "This caller may not list versions.", + "code": "publish_not_permitted", + "trace_id": "0" * 32, + "capability_version": "synthetic", + "retryable": False, + }, + ) + + +def _keep_exchanges(count: int) -> Callable[[Any], None]: + return lambda doc: doc.update(exchanges=doc["exchanges"][:count]) + + +def _never_retried(doc: Any) -> None: + """The 503 ends the record, and the search raises it unretried.""" + doc["exchanges"] = doc["exchanges"][:1] + trace = doc["exchanges"][0]["response"]["json"]["trace_id"] + doc["expect"] = [ + { + "error": { + "class": "ServerError", + "code": "service_unavailable", + "trace_id": trace, + } + } + ] + + +def _proxy_code(code: str) -> Callable[[Any], None]: + def change(doc: Any) -> None: + for exchange in doc["exchanges"]: + exchange["response"]["json"]["error"] = code + doc["expect"][0]["error"]["code"] = code + + return change + + +def _search_posts(change: Callable[[Any], None]) -> Callable[[Any], None]: + return lambda doc: change(doc["exchanges"][0]["request"]["json"]) + + +def _redirect_to(url: str) -> Callable[[Any], None]: + """fetch-spec-known-sentence's files route names `url`, and the client + fetches it.""" + + def change(doc: Any) -> None: + doc["exchanges"][1]["response"]["headers"]["location"] = url + doc["exchanges"][2]["request"]["url"] = url + + return change + + +def _posted_scope(scope: Any) -> Callable[[Any], None]: + return lambda doc: doc["exchanges"][0]["request"]["json"]["input"].update( + scope=scope + ) + + +def _without_data_query(doc: Any) -> None: + del doc["exchanges"][0]["response"]["json"]["parts"][0]["no_data"]["options"][0][ + "data_query" + ] + + +def _second_fetch_served(doc: Any) -> None: + """The second signed fetch serves the stored file.""" + doc["exchanges"][-1]["response"] = { + "status": 200, + "headers": {"content-type": "application/vnd.apache.parquet"}, + "body_file": "fetch-ref.parquet", + } + + +_SUNSET = "scenarios/search-sunset-warning.json" +_FOREIGN = "https://downloads.example.com/b/o?X-Goog-Signature=redacted" +_SERVER_WARNING = "scenarios/search-server-warning.json" +_FOREIGN_ARTIFACT = "scenarios/fetch-spec-foreign-artifact-url.json" +_SAME_ORIGIN_ARTIFACT = "scenarios/fetch-spec-same-origin-artifact-url.json" +_POLL_REFUSED = "scenarios/fetch-spec-poll-refused.json" +_POLL_NOT_FOUND = "scenarios/fetch-spec-poll-not-found.json" +_CUT_OFF_THEN_BUSY = "scenarios/fetch-spec-504-then-503.json" +_BUSY_THEN_CUT_OFF = "scenarios/fetch-spec-503-then-504.json" + + +def _artifact_urls(origin: str) -> Callable[[Any], None]: + """The build's artifact urls become absolute on `origin`.""" + + def change(doc: Any) -> None: + for artifact in doc["exchanges"][0]["response"]["json"]["artifacts"]: + artifact["url"] = origin + urlsplit(artifact["url"]).path + + return change + + +def _warned(index: int, codes: list[str]) -> Callable[[Any], None]: + def change(doc: Any) -> None: + answer = doc["expect"][index]["answer"] + if codes: + answer["warnings"] = codes + else: + answer.pop("warnings") + + return change + + +_ECHOES_SEPARATE = "scenarios/choose-echoes-separate-and-operations.json" +_PLACEHOLDER = "scenarios/choose-posts-unsupported-placeholder.json" +_CODELESS = "scenarios/search-refused-without-code.json" +_ECHO_DROPS = "scenarios/choose-echo-drops-malformed-items.json" + + +def _first_part(change: Callable[[Any], None]) -> Callable[[Any], None]: + return _set_body(0, lambda body: change(body["parts"][0])) + + +def _first_entry(change: Callable[[Any], None]) -> Callable[[Any], None]: + return lambda doc: change( + doc["exchanges"][1]["request"]["json"]["input"]["entries"][0] + ) + + +def _second_option(**fields: Any) -> Callable[[Any], None]: + return _first_part(lambda part: part["no_data"]["options"][1].update(fields)) + + +def _one_part_query(part: Any) -> None: + query = part["no_data"]["options"][0]["data_query"] + query["parts"] = query["parts"][:1] + + +def _trace(trace_id: str | None, index: int = 0) -> Callable[[Any], None]: + return _set_outcome(index, lambda o: o["error"].update(trace_id=trace_id)) + + +def _header_trace(index: int, trace: str | None) -> Callable[[Any], None]: + """Exchange `index` carries an x-dfo-trace-id header, and step 1 expects + `trace` as its error's trace id.""" + + def change(doc: Any) -> None: + response = doc["exchanges"][index]["response"] + response.setdefault("headers", {})["x-dfo-trace-id"] = "4" * 32 + doc["expect"][1]["error"]["trace_id"] = trace + + return change + + +def _diagnostics_trace(doc: Any) -> None: + """Step 1's error carries the answer's diagnostics.trace_id, which no + client reads, in place of its response's header.""" + diagnostics = doc["exchanges"][0]["response"]["json"]["diagnostics"] + doc["expect"][1]["error"]["trace_id"] = diagnostics["trace_id"] + + +def _no_data_options(change: Callable[[Any], Any]) -> Callable[[Any], None]: + """Part 0's no_data options become what `change` makes of them.""" + + def edit(doc: Any) -> None: + no_data = doc["exchanges"][0]["response"]["json"]["parts"][0]["no_data"] + no_data["options"] = change(no_data["options"]) + + return edit + + +def _built_destination_as_objects(doc: Any) -> None: + """The built manifest binds destination to objects, not refs, so the + build keeps no destination group and the sentence lookup posts none.""" + entities = doc["exchanges"][0]["response"]["json"]["definition"]["identity"][ + "entities" + ] + entities["destination"] = [{"dcid": ref} for ref in entities["destination"]] + + +def _mentions_a_string(doc: Any) -> None: + """Each no_data option of the first answer mentions one string, its + words joined, in place of a list of words.""" + for part in doc["exchanges"][0]["response"]["json"]["parts"]: + for option in part.get("no_data", {}).get("options", []): + option["mentions"] = " and ".join(option.get("mentions", [])) + + +def _poll_waits(change: Callable[[list[float]], None]) -> Callable[[Any], None]: + return _set_outcome( + 0, lambda o: change(o["dataset"]["long_builds"][0]["poll_waits"]) + ) + + +def _ends_in(error: dict[str, Any], keep: int) -> Callable[[Any], None]: + """The record keeps its first `keep` exchanges and expects `error`.""" + + def change(doc: Any) -> None: + doc["exchanges"] = doc["exchanges"][:keep] + doc["expect"] = [{"error": error}] + + return change + + +@pytest.mark.parametrize( + ("target", "change", "expected"), + [ + ( + "strict-fields.json", + _strict("/components/schemas/Manifest/properties/sentence"), + "does not resolve", + ), + ( + "strict-fields.json", + _strict("/components/schemas/OperationEnvelope/properties/poll"), + "is not required in OperationEnvelope", + ), + ( + "strict-fields.json", + _strict("/components/schemas/ColumnOptionModel/properties/distinct"), + "admits null", + ), + ( + "strict-fields.json", + lambda doc: doc["enums"][0]["values"].append("verdict"), + "no longer admits ['verdict']", + ), + ( + "strict-fields.json", + _strict("/components/schemas/Manifest/properties/content_version"), + "is listed twice", + ), + ("actions.json", _drop_action("spec_not_found"), "'spec_not_found' has no row"), + ( + "actions.json", + _add_action({"code": "alternates_unevaluated", "action": "report"}), + "outside the active refusals", + ), + ( + "actions.json", + _add_action({"code": "no_such_code", "action": "report"}), + "is not in the registry", + ), + ( + "actions.json", + lambda doc: doc["codes"].reverse(), + "codes are not sorted", + ), + ( + "actions.json", + _set_action("variable_not_resolved", gap_kind=None), + "must carry gap_kind", + ), + ( + "actions.json", + _set_action("entity_ambiguous", action="ask_data_question"), + "choose goes with choice only", + ), + ( + "actions.json", + _set_action("spec_not_found", action="ask_data_question"), + "cannot carry action 'ask_data_question'", + ), + ( + _FETCH, + _set_body(0, lambda body: body.pop("content_version")), + "'content_version' is a required property", + ), + ( + _SEARCH, + _set_body(0, lambda body: body["parts"][0].update(status="maybe")), + "response body", + ), + ( + _SEARCH, + lambda doc: doc["exchanges"][0]["request"]["json"].update(extra=True), + "request body", + ), + ( + _SEARCH, + lambda doc: doc["exchanges"][0]["request"].update(path="/search/nowhere"), + "matches no route", + ), + ( + _FETCH, + lambda doc: doc["exchanges"][1]["request"].update(method="POST", json={}), + "serves no POST", + ), + ( + _SEARCH, + lambda doc: doc["exchanges"][0].update( + response={ + "status": 404, + "json": { + "type": "/codes/request_invalid", + "title": "Not found", + "status": 404, + "detail": "No route.", + "code": "request_invalid", + "trace_id": "t", + "capability_version": "c", + "retryable": False, + }, + } + ), + "not an active code registered with status 404", + ), + ( + "served/openapi.json", + _set_property("Manifest", "content_version", {"title": "Content Version"}), + "content_version admits null", + ), + ( + "served/openapi.json", + _set_property( + "ArtifactEntryModel", "url", {"anyOf": [{"type": "string"}, {}]} + ), + "url admits null", + ), + ( + "scenarios/fetch-ref-unknown-version.json", + _set_outcome(0, lambda o: o["error"].update({"class": "ServerError"})), + "step 0 expects", + ), + ( + _MIXED, + _first_gap(kind="no_data"), + "step 0 expects", + ), + ( + "scenarios/choose-place-one-part.json", + _first_gap(options=7), + "step 0 expects", + ), + ( + _MIXED, + _set_outcome(0, lambda o: o["answer"].update(complete=True)), + "step 0 expects", + ), + ( + "actions.json", + _set_action("snapshot_not_found", action="report"), + "scenarios/fetch-ref-unknown-version.json: step 0 expects", + ), + ( + "actions.json", + _set_action("capability_unavailable", action="report"), + "scenarios/fetch-spec-capability-unavailable.json: step 0 expects", + ), + ( + "actions.json", + _set_action("variable_not_resolved", gap_kind="no_data"), + "scenarios/answer-mixed-fetch-raises.json: step 0 expects", + ), + ( + _SEARCH, + _set_body(0, lambda body: body.pop("kind")), + "step 0 expects", + ), + ( + "scenarios/fetch-ref.json", + _set_outcome( + 0, + lambda o: o["dataset"]["members"][0].update( + content_version="cv_" + "0" * 32 + ), + ), + "step 0 expects", + ), + ( + "scenarios/answer-several-readings-folded.json", + _set_outcome(1, lambda o: o["dataset"]["columns"].pop(0)), + "the part column comes first", + ), + ( + _FOLDED, + _part_rows(lambda d: d["part_rows"][0].update(part="health")), + "part_rows names", + ), + ( + _FOLDED, + _part_rows(lambda d: d.pop("part_rows")), + "part_rows is given exactly when", + ), + ( + _FOLDED, + _part_rows(lambda d: d["part_rows"][1].update(rows=1)), + "rows do not sum", + ), + ( + _TOP5, + _set_outcome(2, lambda o: o["dataset"].update(search_warning=False)), + "step 2 expects", + ), + ( + _TOP5, + _set_step(1, strict=False), + "the steps make a POST /datasets the record lacks", + ), + ( + "scenarios/fetch-strict-info-notice.json", + _set_body( + 0, lambda body: body["parts"][0]["warnings"][0].update(severity="warn") + ), + "the steps never make exchanges 1 to 3", + ), + ( + "scenarios/answer-timed-out.json", + _first_gap(kind="not_understood"), + "step 0 expects", + ), + ( + "scenarios/answer-unsupported-part.json", + _first_gap(kind="unknown"), + "step 0 expects", + ), + ( + "scenarios/answer-unknown-kind.json", + _set_body(0, lambda body: body.update(kind="resolution")), + "step 0 expects", + ), + ( + "scenarios/fetch-partial-nothing-answered.json", + _set_outcome(1, lambda o: o["error"].update({"class": "DeclinedError"})), + "step 1 expects", + ), + ( + "scenarios/choose-refused-option-out-of-range.json", + _set_step(1, option=2), + "the steps make a POST /search/resolve the record lacks", + ), + ( + "scenarios/choose-refused-mention-names-two-parts.json", + _set_step(1, part=1), + "the steps make a POST /search/resolve the record lacks", + ), + ( + "scenarios/choose-part-by-mention.json", + _set_step(1, part="Germany"), + "the steps never make exchanges 1 to 1", + ), + ( + "scenarios/choose-candidate-two-parts.json", + _posted(1, lambda entry: entry.pop("entity_groups")), + "where the rules post", + ), + ( + "scenarios/resubmit-candidates-sibling.json", + _posted(1, lambda entry: entry["candidates"].reverse()), + "where the rules post", + ), + ( + "scenarios/resubmit-candidates-sibling.json", + _posted(1, lambda entry: entry.update(ordering="broadest_first")), + "where the rules post", + ), + ( + "scenarios/resubmit-placeholder-without-restatement.json", + _posted(1, lambda entry: entry.update(reason="entity_ambiguous")), + "where the rules post", + ), + ( + "scenarios/choose-option-beside-definite.json", + _posted(0, lambda entry: entry.update(entry_kind="parsed")), + "where the rules post", + ), + ( + "scenarios/choose-place-two-parts.json", + _posted(0, lambda entry: entry.update(entry_kind="placeholder")), + "where the rules post", + ), + ( + "scenarios/fetch-spec-narrowed.json", + lambda doc: doc["exchanges"][1]["request"]["json"]["input"]["entries"][ + 0 + ].update(variable_text="ODA"), + "where the rules post", + ), + ( + _GROUP_NARROWED, + _posted(0, lambda entry: entry.pop("entity_groups")), + "where the rules post", + ), + (_GROUP_REBOUND, _rebound_group_kept, "where the rules post"), + ( + _REBOUND, + _posted_entities(lambda entities: entities.pop("destination")), + "where the rules post", + ), + ( + _DROPPED, + _posted_entities(lambda entities: entities.update(origin=["country/DEU"])), + "where the rules post", + ), + ( + _REBOUND, + _posted_entities( + lambda entities: entities.update(origin=["country/DEU", "country/FRA"]) + ), + "where the rules post", + ), + (_REBOUND, _set_step(0, entities={}), "where the rules post"), + ( + _FETCH, + lambda doc: doc["call"].append({"op": "fetch"}), + "does not follow a step in ['choose', 'fetch_answer', 'search']", + ), + ( + _SEARCH, + lambda doc: doc["exchanges"].append(doc["exchanges"][0]), + "never make exchanges 1 to 1", + ), + ( + _FETCH, + lambda doc: doc["exchanges"].pop(0), + "do not fit the steps", + ), + ( + "scenarios/fetch-ref.json", + lambda doc: doc["exchanges"][1]["response"]["headers"].update( + location="https://storage.googleapis.com/b/o?GoogleAccessId=sa&Signature=s" + ), + "keeps a query other than", + ), + ( + "scenarios/fetch-ref.json", + lambda doc: doc["exchanges"][2]["request"].update( + url="https://storage.googleapis.com/b/o" + ), + "keeps a query other than", + ), + ( + "scenarios/fetch-null-member.json", + lambda doc: doc["exchanges"][3]["response"].update( + body_file="fetch-ref.parquet" + ), + "neither the scenario's own nor one its parent names", + ), + (_SEARCH, lambda doc: doc.update(name="search-other"), "differs"), + ( + _SEARCH, + lambda doc: doc["call"].insert(0, {"op": "result"}), + "does not follow a step in ['mint', 'operation']", + ), + ( + _SEARCH, + lambda doc: doc["expect"].append(doc["expect"][0]), + "1 steps but 2 outcomes", + ), + ( + _SEARCH, + lambda doc: doc.update( + origin={"kind": "synthetic", "derived_from": "absent", "edit": "None."} + ), + "is not a recorded scenario", + ), + ( + _FETCH, + lambda doc: doc["exchanges"][2]["response"].update(body_file="other.bin"), + "neither the scenario's own", + ), + ( + "refs/ref-one-member.json", + lambda doc: doc.update(error={"by": "schema"}), + "carries neither or both", + ), + ( + "refs/ref-repeated-spec-id-rejected.json", + lambda doc: doc["ref"]["members"].pop(), + "breaks rule None, expected 'repeated_spec_id'", + ), + ( + "rules/key-format.json", + lambda doc: doc["vectors"].append(doc["vectors"][0]), + "vector 'secret-key-passes' repeats", + ), + ( + "client-codes.json", + _set_action("offline", condition=None), + "'condition' is a required property", + ), + ( + "client-codes.json", + lambda doc: doc["codes"].reverse(), + "codes are not sorted", + ), + ( + "client-codes.json", + lambda doc: doc["codes"].insert(1, doc["codes"][0]), + "'answer_declined' is listed twice", + ), + ( + "client-codes.json", + _add_action( + { + "code": "spec_not_found", + "class": "NotFoundError", + "retryable": False, + "condition": "x", + } + ), + "'spec_not_found' is also a code in actions.json", + ), + ( + "client-codes.json", + _add_action( + { + "code": "alternates_unevaluated", + "class": "ServerError", + "retryable": False, + "condition": "x", + } + ), + "'alternates_unevaluated' is also a code in registries/codes.json", + ), + ( + "client-codes.json", + _set_action("answer_declined", **{"class": "SearchWarning"}), + "raises 'SearchWarning', a class no scenario names", + ), + ( + "client-codes.json", + _set_action("offline", **{"class": "by_status"}), + "where 'refusal_without_code' alone does", + ), + ( + "client-codes.json", + _drop_action("answer_declined"), + "'answer_declined' is not a client code of one class", + ), + ( + "client-codes.json", + _set_action("choice_invalid", **{"class": "ContractError"}), + "client code 'choice_invalid' raises ContractError, not InvalidRequestError", + ), + ( + _NO_CHOICE, + _error_code(1, None), + "InvalidRequestError code None is neither a refusal's code", + ), + ( + _DECLINED, + _error_code(1, "choice_invalid"), + "raises InvalidRequestError, not DeclinedError", + ), + ( + _NO_CHOICE, + _error_code(1, "invalid_argument"), + '"code": "choice_invalid"', + ), + ( + _REQUEST_INVALID, + _set_body(0, lambda body: body.pop("code")), + '"code": "refusal_without_code"', + ), + ( + _TOP5, + _set_body(0, _one_hint), + '"code": "slot_defaulted"', + ), + ( + "served/SOURCE.json", + lambda doc: doc.update(commit="8408f1f"), + "commit is not a 40-character sha", + ), + ( + _UNKNOWN_VERSION, + _refused_without_code(408), + '"class": "DfoTimeoutError"', + ), + ( + _UNKNOWN_VERSION, + _refused_without_code(410), + '"class": "NotFoundError"', + ), + ( + _NEWER, + _set_outcome( + 0, lambda o: o["error"].update(newest_version="cv_" + "2" * 32) + ), + "step 0 expects", + ), + ( + _NEWER, + _set_outcome(0, lambda o: o["error"].pop("newest_version")), + ( + "expect/0: {'error': {'class': 'VersionUnavailableError', 'code': " + "'artifact_expired', 'trace_id': '00000000000000000000000000000000'}} " + "is not valid" + ), + ), + ( + "scenarios/fetch-ref-expired-not-reproducible.json", + _last_response( + lambda r: r.update( + status=200, + json={"versions": [{"content_version": "cv_" + "3" * 32}]}, + ) + ), + "step 0 expects", + ), + ( + "scenarios/fetch-ref-expired-rebuild-same-version.json", + _set_body(0, lambda body: body.update(code="snapshot_not_found")), + "the steps never make exchanges 1 to 3", + ), + ( + "scenarios/fetch-spec-strict-warning.json", + _set_body(0, lambda body: body["warnings"][0].update(severity="info")), + "the steps make a GET /api/datasets/", + ), + ( + "scenarios/fetch-spec-digest-mismatch.json", + _last_response( + lambda r: r.update(body_file="fetch-spec-known-sentence.parquet") + ), + "step 0 expects", + ), + ( + "scenarios/fetch-spec-frame-layout.json", + lambda doc: doc["exchanges"][0]["request"]["json"]["options"].pop("layout"), + "where the rules post", + ), + ( + "scenarios/fetch-spec-resubmit-other-spec.json", + _resubmit_answers_built, + "the steps make a GET /api/datasets/", + ), + ( + "scenarios/fetch-frame-several-readings.json", + lambda doc: doc["call"][1].pop("layout"), + "the steps make a POST /datasets the record lacks", + ), + ( + _ECHOES, + _posted(1, lambda entry: entry.pop("assumptions")), + "where the rules post", + ), + ( + _ECHOES, + _posted(0, lambda entry: entry.pop("assumptions")), + "where the rules post", + ), + ( + "scenarios/resubmit-candidates-sibling.json", + _posted(1, lambda entry: entry["candidates"][0].pop("assumptions")), + "where the rules post", + ), + ( + "scenarios/answer-candidates-choose-fetch.json", + _posted(0, lambda entry: entry.pop("assumptions")), + "where the rules post", + ), + ( + "scenarios/choose-candidate-assumed-reading.json", + _posted(0, lambda entry: entry["assumptions"][0].update(text="ODA")), + "where the rules post", + ), + ( + "scenarios/choose-candidate-assumed-reading.json", + _set_body(1, lambda body: body.update(rendered_sentence="Other.")), + "step 1 expects", + ), + ( + _NOT_REPRODUCIBLE, + lambda doc: doc["exchanges"][-1]["request"].update( + path=doc["exchanges"][-1]["request"]["path"].removesuffix("?limit=1") + ), + "where the steps make a GET", + ), + (_NOT_REPRODUCIBLE, _last_response(_versions_forbidden), "step 0 expects"), + (_RETRY_503, _repeat(0, 2), "the steps never make exchanges"), + ( + _RETRY_503, + _set_body(0, lambda body: body.update(retryable=False)), + "the steps never make exchanges", + ), + (_RETRY_503, _refused_400, "the steps never make exchanges"), + ( + "scenarios/fetch-retry-after-504.json", + _repeat(1, 1), + "the steps never make exchanges", + ), + ( + "scenarios/answer-candidates-choose-fetch.json", + lambda doc: doc["exchanges"][1]["request"].pop("json"), + "scenarios/answer-candidates-choose-fetch.json: schema", + ), + ( + _REBOUND, + lambda doc: doc["exchanges"][0]["request"].pop("json"), + "scenarios/fetch-spec-entity-rebound.json: schema", + ), + ( + "scenarios/answer-several-readings-folded.json", + _swap_builds, + "where the rules post", + ), + ( + "scenarios/mint-async-build.json", + _poll_other_operation, + "where the steps make a GET /datasets/operations/op_", + ), + ( + "scenarios/fetch-spec-known-sentence.json", + lambda doc: doc["exchanges"][2]["request"].update( + url="https://storage.googleapis.com/other-bucket/other-object" + "?X-Goog-Signature=redacted" + ), + "where the steps make a GET https://storage.googleapis.com/", + ), + ( + "scenarios/fetch-spec-known-sentence.json", + lambda doc: doc["exchanges"][1]["response"]["headers"].pop("location"), + "names no location", + ), + ( + "scenarios/fetch-spec-member-not-resolvable.json", + _made_up_code, + "problem code 'made_up_code' is not in the registry", + ), + ( + "scenarios/mint-async-build.json", + lambda doc: doc["exchanges"][0]["response"].update(status=200), + "a mint step's build answers 200; a mint expects an operation", + ), + ( + "served/openapi.json", + _drop_paths("/api/graph/"), + "no route under /api/graph", + ), + ( + "served/openapi.json", + lambda doc: doc["paths"].update({"/api/skills": {}}), + "/api/skills is under no deployed surface", + ), + ( + "scenarios/fetch-ref-newest-version.json", + _set_outcome(0, lambda o: o["newest_version"].update(content_version=None)), + "step 0 expects", + ), + ( + "scenarios/mint-async-build.json", + _set_step(0, window=[2020, 2023]), + "scenarios/mint-async-build.json: schema: call/0", + ), + ( + "scenarios/search-proxy-unavailable.json", + _keep_exchanges(2), + "is a retryable refusal with retries left", + ), + (_RETRY_503, _never_retried, "is a retryable refusal with retries left"), + ( + _SEARCH, + _search_posts(lambda body: body.update(response_options=None)), + "where the rules post", + ), + ( + _SEARCH, + _search_posts(lambda body: body.pop("schema_version")), + "where the rules post", + ), + ( + "scenarios/mint-async-build.json", + _set_step(1, timeout=0.001), + "scenarios/mint-async-build.json: schema: call/1", + ), + ( + "scenarios/search-proxy-unavailable.json", + _proxy_code("made_up_code"), + "proxy code 'made_up_code' is not a code proxy-codes.json lists", + ), + ( + "scenarios/search-proxy-unavailable.json", + _proxy_code("rate_limited"), + "lists with status 502", + ), + ( + "proxy-codes.json", + _add_action({"code": "spec_not_found", "status": 404, "condition": "x"}), + "'spec_not_found' is also a code in registries/codes.json", + ), + ( + "warning-codes.json", + _drop_action("route_deprecated"), + "no row for 'route_deprecated'", + ), + ( + "warning-codes.json", + _add_action( + {"code": "key_too_long", "class": "DfoWarning", "condition": "x"} + ), + "'key_too_long' is a warning no rule issues", + ), + ( + "warning-codes.json", + _add_action({"code": "offline", "class": "DfoWarning", "condition": "x"}), + "'offline' is also a code in client-codes.json", + ), + ( + "scenarios/fetch-ref.json", + lambda doc: doc["exchanges"][1]["response"]["headers"].update( + location="http://localhost:19493/b/o?X-Goog-Signature=redacted" + ), + "names localhost:19493, where a record's absolute URL names", + ), + ( + "scenarios/fetch-ref.json", + lambda doc: doc["exchanges"][2]["request"].update( + url="http://127.0.0.1:4443/b/o?X-Goog-Signature=redacted" + ), + "names 127.0.0.1:4443, where a record's absolute URL names", + ), + (_FETCH, _redirect_to(_FOREIGN), "names downloads.example.com"), + (_FETCH, _redirect_to(_FOREIGN), "the steps never make exchanges 2 to 2"), + ( + "scenarios/fetch-spec-relative-location.json", + lambda doc: doc["exchanges"][2]["request"].update(origin_path="/bytes"), + "where the steps make a GET /api/datasets/", + ), + ( + "scenarios/fetch-spec-empty-narrowing.json", + _posted_scope({"facets": {}}), + "where the rules post", + ), + ( + "scenarios/fetch-spec-empty-narrowing.json", + _posted_scope({"entities": {}}), + "where the rules post", + ), + ( + _SEARCH, + lambda doc: doc["exchanges"][0]["response"].pop("json"), + "step 0 expects", + ), + ( + _SEARCH, + lambda doc: doc["origin"].update(dfo_commit="f" * 40), + "is not served/SOURCE.json's commit", + ), + ( + "scenarios/fetch-ref-signed-url-refused-twice.json", + _second_fetch_served, + "step 0 expects", + ), + ( + "scenarios/operation-failed-without-error.json", + _error_code(1, "refusal_without_code"), + "step 1 expects", + ), + ( + "client-codes.json", + _set_action("offline", retryable=None), + "'retryable' is a required property", + ), + ( + "client-codes.json", + _set_action("offline", retryable="by_status"), + "'offline' takes its retryable flag by_status", + ), + ( + "scenarios/newest-version-unreadable-page.json", + lambda doc: doc["expect"].__setitem__( + 0, {"newest_version": {"content_version": None}} + ), + "step 0 expects", + ), + ( + _RETRY_503, + _set_outcome(0, lambda o: o["answer"].update(retry_waits=[0.5])), + "step 0 expects", + ), + ( + "scenarios/fetch-spec-504-retry-after.json", + _set_outcome(0, lambda o: o["dataset"].update(retry_waits=[0.5])), + "step 0 expects", + ), + ( + _SUNSET, + _set_outcome(0, lambda o: o["answer"].pop("warnings")), + "step 0 expects", + ), + ( + _SUNSET, + _set_outcome( + 1, lambda o: o["answer"].update(warnings=["route_deprecated"]) + ), + "step 1 expects", + ), + ( + "scenarios/answer-unknown-part-status.json", + _set_body(0, lambda body: body["parts"][1].update(status=7)), + "the step follows no answer", + ), + ( + "scenarios/answer-definite-fetch.json", + _set_body( + 0, + lambda body: body["parts"][0]["spec"]["definition"].update( + spec_id="spec_" + "0" * 32 + ), + ), + "the step follows no answer", + ), + ( + "scenarios/choose-place-one-part.json", + _without_data_query, + "the steps never make exchanges 1 to 1", + ), + ( + "scenarios/fetch-spec-member-not-resolvable.json", + lambda doc: doc["exchanges"][0]["response"]["headers"].update( + {"content-type": "text/html"} + ), + "step 0 expects", + ), + ( + _SAME_ORIGIN_ARTIFACT, + _artifact_urls("https://downloads.example.com"), + "the steps never make exchanges 1 to 2", + ), + ( + _FOREIGN_ARTIFACT, + _artifact_urls("http://127.0.0.1:19493"), + "the steps make a GET /api/datasets/", + ), + ( + _SAME_ORIGIN_ARTIFACT, + _artifact_urls("http://127.0.0.1:8083"), + "the steps never make exchanges 1 to 2", + ), + (_SERVER_WARNING, _warned(0, []), "step 0 expects"), + (_SERVER_WARNING, _warned(1, []), "step 1 expects"), + ( + _SERVER_WARNING, + _warned(1, ["route_deprecated", "server_warning"]), + "step 1 expects", + ), + (_SERVER_WARNING, _warned(2, ["route_deprecated"]), "step 2 expects"), + (_SERVER_WARNING, _warned(2, ["server_warning"]), "step 2 expects"), + (_POLL_REFUSED, _repeat(4, 1), "the steps never make exchanges 7 to 15"), + ( + _POLL_REFUSED, + _set_outcome( + 0, lambda o: o["dataset"]["long_builds"][0]["poll_waits"].pop(0) + ), + "step 0 expects", + ), + (_POLL_NOT_FOUND, _repeat(1, 1), "the steps never make exchanges 2 to 2"), + ( + _POLL_NOT_FOUND, + _set_body(1, lambda body: body.update(retryable=True)), + "the record lacks", + ), + (_CUT_OFF_THEN_BUSY, _repeat(1, 1), "the steps never make exchanges 2 to 2"), + ( + _BUSY_THEN_CUT_OFF, + _ends_in( + {"class": "ServerError", "code": "timeout", "trace_id": "0" * 32}, 2 + ), + "is a retryable refusal with retries left", + ), + ( + _BUSY_THEN_CUT_OFF, + _set_outcome(0, lambda o: o["dataset"].update(retry_waits=[0.5])), + "step 0 expects", + ), + ( + "client-codes.json", + _drop_action("key_empty"), + "no row for 'key_empty', an error the key-lookup rule raises", + ), + ( + "client-codes.json", + _drop_action("profile_not_found"), + "no row for 'profile_not_found', an error the key-lookup rule raises", + ), + ( + "client-codes.json", + _drop_action("profile_without_key"), + "no row for 'profile_without_key', an error the key-lookup rule raises", + ), + ( + "client-codes.json", + _drop_action("credentials_file_invalid"), + ( + "no row for 'credentials_file_invalid', an error the key-lookup " + "rule raises" + ), + ), + ( + "client-codes.json", + _set_action("key_empty", **{"class": "ContractError"}), + "takes 'ContractError', not 'AuthenticationError'", + ), + ("scenarios/search-no-json-body.json", _trace(None), "step 0 expects"), + ("scenarios/fetch-spec-strict-warning.json", _trace(None), "step 0 expects"), + (_TOP5, _header_trace(0, None), "step 1 expects"), + (_NO_CHOICE, _trace("f" * 32, 1), "step 1 expects"), + (_NO_CHOICE, _header_trace(0, "4" * 32), "step 1 expects"), + ( + "scenarios/fetch-spec-digest-mismatch.json", + _trace("f" * 32), + "step 0 expects", + ), + ("scenarios/answer-timed-out.json", _trace(None, 1), "step 1 expects"), + ( + "scenarios/choose-refused-shared-label.json", + _trace("5" * 32, 1), + "step 1 expects", + ), + (_DECLINED, _header_trace(0, None), "step 1 expects"), + (_CODELESS, _trace("2" * 32), "step 0 expects"), + ( + _CODELESS, + _set_body(0, lambda body: body.pop("trace_id")), + "step 0 expects", + ), + ("scenarios/search-unauthorized.json", _trace(None), "step 0 expects"), + ("scenarios/search-proxy-unavailable.json", _trace("f" * 32), "step 0 expects"), + ("scenarios/answer-empty-parts.json", _trace("f" * 32), "step 0 expects"), + (_NEWER, _trace(None), "step 0 expects"), + ( + _CODELESS, + _set_outcome(0, lambda o: o["error"].pop("trace_id")), + "'code': 'refusal_without_code'}} is not valid", + ), + ( + "scenarios/search-proxy-unavailable.json", + lambda doc: doc["exchanges"][0]["response"]["json"].update( + error=["transient_unavailable"] + ), + "proxy code ['transient_unavailable'] is not a code", + ), + ( + _FETCH, + _artifact_urls("https://storage.googleapis.com"), + "the steps never make exchanges 1 to 2", + ), + ( + _FETCH, + _set_body(0, lambda body: body["definition"].pop("identity")), + "the steps never make exchanges 1 to 2", + ), + ( + "scenarios/answer-definite-fetch.json", + _first_part(lambda part: part["spec"]["definition"].pop("identity")), + "the step follows no answer", + ), + ( + "scenarios/answer-definite-fetch.json", + _first_part(lambda part: part["spec"].pop("resolved")), + "the step follows no answer", + ), + ( + "scenarios/answer-nested-specs-unchecked.json", + lambda doc: doc["exchanges"][1]["response"]["json"]["parts"][0]["spec"].pop( + "resolved" + ), + "step 1 expects", + ), + (_SEARCH, _set_body(0, lambda body: body.update(parts=[])), "step 0 expects"), + ( + _SEARCH, + lambda doc: doc["exchanges"][0]["response"].update(json=[]), + "step 0 expects", + ), + ( + _CODELESS, + _set_body(0, lambda body: body.update(retryable=True)), + "is a retryable refusal with retries left", + ), + (_CODELESS, _repeat(0, 1), "the steps never make exchanges 1 to 1"), + ( + "scenarios/search-unauthorized.json", + _repeat(0, 1), + "the steps never make exchanges 1 to 1", + ), + ( + _ECHOES_SEPARATE, + _first_entry(lambda entry: entry.pop("separate")), + "where the rules post", + ), + ( + _ECHOES_SEPARATE, + _first_entry(lambda entry: entry.update(separate=False)), + "where the rules post", + ), + ( + _ECHOES_SEPARATE, + _first_entry(lambda entry: entry.pop("operations")), + "where the rules post", + ), + ( + _ECHO_DROPS, + _posted(1, lambda entry: entry["operations"][0].update(over=3)), + "where the rules post", + ), + ( + _ECHO_DROPS, + _posted(1, lambda entry: entry["assumptions"][1].update(note="unread")), + "where the rules post", + ), + ( + _ECHO_DROPS, + _posted(1, lambda entry: entry["assumptions"][1]["refs"].append(110)), + "where the rules post", + ), + ( + _ECHO_DROPS, + _posted(0, lambda entry: entry["assumptions"].append(7)), + "where the rules post", + ), + ( + _PLACEHOLDER, + _first_entry(lambda entry: entry.update(code="scope_unsupported")), + "where the rules post", + ), + ( + "scenarios/choose-refused-unknown-status.json", + _first_part( + lambda part: part.update( + status="unsupported", unsupported={"code": "scope_too_broad"} + ) + ), + "the record lacks", + ), + ( + "scenarios/choose-refused-part-without-variable-text.json", + _first_part(lambda part: part.update(variable_text="GDP")), + "the record lacks", + ), + ( + "scenarios/choose-refused-shared-label.json", + _second_option(label="Congo [Republic]"), + "the record lacks", + ), + ( + "scenarios/choose-option-two-part-query.json", + _first_part(_one_part_query), + "the record lacks", + ), + ("scenarios/answer-timed-out.json", _diagnostics_trace, "step 1 expects"), + ("scenarios/answer-empty-parts.json", _trace(None), "step 0 expects"), + ( + "scenarios/operation-failed-without-error.json", + _trace(None, 1), + "step 1 expects", + ), + ( + "scenarios/choose-option-two-part-query.json", + _trace(None, 1), + "step 1 expects", + ), + ( + "scenarios/fetch-spec-poll-refused-backoff.json", + _poll_waits(lambda waits: waits.__setitem__(2, waits[1])), + "step 0 expects", + ), + ( + "scenarios/fetch-spec-poll-refused-retry-after.json", + _poll_waits(lambda waits: waits.__setitem__(1, waits[0])), + "step 0 expects", + ), + ( + _FETCH, + lambda doc: doc["exchanges"][2]["response"].update(status=206), + "the record lacks", + ), + ( + _FETCH, + lambda doc: doc["exchanges"][1]["response"].update(status=204), + "the steps never make exchanges 2 to 2", + ), + ( + _FETCH, + lambda doc: doc["exchanges"][1]["response"].update(status=201, json={}), + "the steps never make exchanges 2 to 2", + ), + ( + _SEARCH, + _no_data_options(lambda options: dict(enumerate(options))), + "expects", + ), + (_SEARCH, _no_data_options(lambda options: None), "step 0 expects"), + (_GROUP_NARROWED, _built_destination_as_objects, "where the rules post"), + ( + "scenarios/choose-part-by-mention.json", + _mentions_a_string, + "the steps never make exchanges 1 to 1", + ), + ( + "scenarios/answer-timed-out.json", + _set_body(0, lambda body: body.update(diagnostics="timed out")), + "step 0 expects", + ), + ( + "scenarios/answer-candidates-choose-fetch.json", + _set_body( + 0, + lambda body: body["parts"][0]["candidates"]["specs"].__setitem__( + 0, "x" + ), + ), + "the step follows no answer", + ), + ], + ids=[ + "strict-pointer-unresolved", + "strict-pointer-optional", + "strict-pointer-nullable", + "strict-enum-value-gone", + "strict-pointer-repeated", + "action-row-missing", + "action-row-for-a-warning", + "action-row-for-an-unknown-code", + "actions-unsorted", + "gap-kind-missing", + "choose-without-choice", + "answer-action-on-a-problem-code", + "recorded-body-missing-a-strict-member", + "recorded-body-unknown-part-status", + "recorded-request-extra-member", + "unrouted-path", + "unserved-method", + "problem-code-wrong-status", + "strict-member-untyped", + "strict-member-open-union", + "expect-wrong-error-class", + "expect-wrong-gap-kind", + "expect-wrong-option-count", + "expect-wrong-complete", + "expect-stale-after-action-change", + "capability-unavailable-reported", + "expect-stale-after-gap-kind-change", + "answer-without-kind", + "expect-wrong-content-version", + "stacked-without-part-column", + "part-rows-wrong-part-value", + "part-rows-missing", + "part-rows-wrong-sum", + "expect-wrong-search-warning", + "strict-fetch-made-lenient", + "warn-notice-raises-on-strict", + "expect-wrong-timed-out-gap", + "expect-wrong-unsupported-gap", + "known-kind-raises-nothing", + "partial-fetch-nothing-answered", + "refusal-option-in-range", + "refusal-part-named", + "mention-names-no-part", + "definite-entry-without-groups", + "candidates-entry-reordered", + "candidates-entry-ordering-recomputed", + "placeholder-entry-wrong-reason", + "definite-part-posted-parsed", + "restated-part-posted-placeholder", + "identity-resubmit-wrong-variable-text", + "kept-group-dropped", + "rebound-role-group-kept", + "unnamed-role-dropped", + "null-role-kept", + "named-role-merged", + "no-role-named-posts-entities", + "answer-fetch-after-spec-fetch", + "exchange-never-made", + "exchanges-unfit", + "location-v2-signed", + "signed-url-without-redacted-query", + "body-file-of-another-scenario", + "scenario-name-mismatch", + "step-out-of-order", + "outcome-count-mismatch", + "synthetic-without-a-parent", + "body-file-misnamed", + "ref-example-both-verdicts", + "ref-example-wrong-verdict", + "rule-vector-repeated", + "client-code-without-condition", + "client-codes-unsorted", + "client-code-repeated", + "client-code-is-an-action-code", + "client-code-is-a-registry-code", + "client-code-raises-a-warning", + "client-code-by-status-beside-refusal-without-code", + "client-code-the-rules-raise-missing", + "client-code-class-changed", + "client-error-without-code", + "client-error-code-of-another-class", + "client-error-code-the-rules-do-not-raise", + "refusal-without-code", + "search-warning-one-hint-code", + "source-commit-short", + "status-408-without-code", + "status-410-without-code", + "expect-wrong-newest-version", + "version-unavailable-without-newest-version", + "newest-version-from-the-versions-route", + "unknown-version-ends-the-lookup", + "info-warning-raises-on-strict", + "digest-match-raises", + "frame-build-posts-long-options", + "resubmit-answering-another-spec", + "several-readings-fetched-long", + "definite-entry-without-its-assumptions", + "chosen-entry-without-its-reading-assumptions", + "candidate-without-its-reading-assumptions", + "one-part-pick-without-its-reading-assumptions", + "one-part-pick-rewords-its-reading-assumptions", + "picked-sentence-not-taken-from-the-response", + "versions-without-limit", + "versions-forbidden-raises", + "retry-past-the-budget", + "retry-of-a-refusal-not-retryable", + "retry-of-a-400", + "build-504-retried-twice", + "pick-posted-without-a-body", + "build-posted-without-a-body", + "builds-in-another-order", + "poll-of-another-operation", + "signed-url-not-the-redirect", + "redirect-without-location", + "synthetic-problem-code-unregistered", + "mint-answering-200", + "served-document-without-graph", + "served-document-with-skills", + "newest-version-not-the-listed-one", + "mint-step-narrowed", + "retry-short-of-the-budget", + "retryable-refusal-never-retried", + "search-posts-an-extra-member", + "search-without-schema-version", + "step-timeout", + "proxy-code-unlisted", + "proxy-code-wrong-status", + "proxy-code-is-a-registry-code", + "warning-code-missing", + "warning-code-no-rule-issues", + "warning-code-is-a-client-code", + "location-localhost-alias", + "signed-url-other-port", + "location-foreign-origin-recorded", + "location-foreign-origin-raises", + "relative-location-against-the-origin", + "empty-facets-posts-scope", + "empty-entities-posts-scope", + "search-200-without-body", + "dfo-commit-not-the-served-commit", + "second-signed-fetch-served", + "failed-operation-without-error-uncoded", + "client-code-without-retryable", + "client-code-retryable-by-status", + "unreadable-versions-page-reads-as-none", + "retry-waits-backoff-over-retry-after", + "build-retry-waits-backoff-over-retry-after", + "sunset-warning-missing", + "sunset-warning-repeated", + "part-status-not-a-string", + "definition-spec-id-mismatch", + "one-part-option-without-data-query", + "refusal-in-another-content-type", + "artifact-url-foreign-fetched", + "artifact-url-same-origin-refused", + "artifact-url-other-port-fetched", + "server-warning-missing", + "deprecation-pair-keyed-per-process", + "server-warning-repeated", + "server-warning-new-message-missing", + "deprecation-new-pair-missing", + "poll-retried-past-the-budget", + "poll-wait-after-refusal-missing", + "non-retryable-poll-polled-again", + "poll-refusal-made-retryable", + "build-posted-twice-after-cut-off", + "cut-off-after-a-503-not-posted-again", + "cut-off-retry-waits-short", + "key-lookup-reason-key-empty-missing", + "key-lookup-reason-profile-not-found-missing", + "key-lookup-reason-profile-without-key-missing", + "key-lookup-reason-credentials-file-invalid-missing", + "key-lookup-reason-of-another-class", + "unexpected-response-without-its-response-trace-id", + "data-warning-without-its-response-trace-id", + "search-warning-without-its-answer-trace-id", + "choice-invalid-with-a-trace-id", + "choice-invalid-takes-the-answer-trace-id", + "storage-failure-with-a-trace-id", + "answer-incomplete-without-its-answer-trace-id", + "choice-invalid-takes-the-answer-response-trace-id", + "answer-declined-without-its-answer-trace-id", + "trace-id-of-the-header-over-the-body", + "trace-id-header-fallback-ignored", + "trace-id-header-fallback-dropped", + "trace-id-on-a-refusal-with-neither", + "trace-id-on-a-client-error", + "version-unavailable-without-its-refusal-trace-id", + "error-outcome-without-trace-id", + "proxy-code-not-a-string", + "artifact-url-on-storage-fetched", + "manifest-without-identity-read", + "search-spec-without-identity-read", + "search-spec-without-resolved-read", + "read-spec-without-resolved-beside-unread-ones", + "empty-parts-read-as-an-answer", + "search-body-not-an-object-read", + "codeless-refusal-retryable-by-body-unretried", + "codeless-refusal-not-retryable-retried", + "unchanged-key-sent-again-after-401", + "separate-not-echoed", + "separate-false-echoed", + "operations-not-echoed", + "unread-operation-member-echoed", + "unknown-assumption-member-echoed", + "unread-ref-echoed", + "unread-assumption-echoed", + "placeholder-of-another-code", + "unknown-status-refusal-on-a-postable-part", + "variable-text-refusal-on-a-named-part", + "shared-label-refusal-on-distinct-labels", + "two-part-query-refusal-on-a-one-part-query", + "trace-id-read-from-diagnostics", + "body-contract-violation-without-its-trace-id", + "failed-operation-without-its-header-trace-id", + "option-contract-violation-without-its-answer-trace-id", + "refused-poll-repeats-its-backoff-wait", + "refused-poll-retry-after-ignored", + "signed-fetch-206-read-as-the-file", + "files-route-204-read-as-a-redirect", + "files-route-201-read-as-a-redirect", + "no-data-options-as-an-object-counted", + "no-data-options-null-counted", + "bound-entities-as-objects-compared", + "mentions-as-a-string-matched", + "diagnostics-not-an-object-read", + "candidate-spec-not-an-object-read", + ], +) +def test_a_broken_contract_is_reported( + package_dir: Path, + target: str, + change: Callable[[Any], None], + expected: str, +) -> None: + _edit(package_dir / target, change) + problems = validator.validate() + assert any(expected in problem for problem in problems), problems + + +def test_a_record_that_holds_only_under_its_recorded_host_is_reported( + package_dir: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + """The second replay moves the recorded origin a response names to the + replay's own; without the move, the manifest of + fetch-spec-same-origin-artifact-url names a host the replay is not on.""" + monkeypatch.setattr( + validator, "relocated", lambda exchanges, *_: [dict(e) for e in exchanges] + ) + problems = validator.validate() + name = "scenarios/fetch-spec-same-origin-artifact-url.json: replayed under" + assert [p for p in problems if "replayed under" in p] == [ + p for p in problems if p.startswith(name) + ] + assert any(p.startswith(name) for p in problems), problems + + +@pytest.mark.parametrize("body_trace", ["", 7], ids=["empty", "a-number"]) +def test_a_body_trace_id_that_is_not_a_non_empty_string_reads_as_absent( + package_dir: Path, body_trace: Any +) -> None: + """A problem document's trace_id that is empty or not a string reads as + absent, so the refusal carries its x-dfo-trace-id header.""" + + def change(doc: Any) -> None: + response = doc["exchanges"][0]["response"] + response["json"]["trace_id"] = body_trace + doc["expect"][0]["error"]["trace_id"] = response["headers"]["x-dfo-trace-id"] + + _edit(package_dir / _CODELESS, change) + problems = validator.validate() + assert not [p for p in problems if _CODELESS in p], problems + + +def test_one_record_that_crashes_its_derivation_is_its_own_problem( + package_dir: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + """An exception while deriving one record's outcomes is that record's + problem, and every other record is still checked.""" + step = validator._Replay.step + + def crashing(self: Any, chosen: dict[str, Any]) -> dict[str, Any]: + if chosen.get("question") == "should donors give more aid to Kenya?": + raise TypeError("a malformed member the rules missed") + return step(self, chosen) + + monkeypatch.setattr(validator._Replay, "step", crashing) + _edit(package_dir / _FETCH, _set_outcome(0, lambda o: o.update(dataset={}))) + problems = validator.validate() + assert any(p.startswith(_DECLINED) and "TypeError" in p for p in problems), problems + assert any(p.startswith(_FETCH) for p in problems), problems + + +@pytest.mark.parametrize( + ("headers", "reported"), + [ + ({}, True), + ({"cache-control": "no-store"}, True), + ({"cache-control": "public, max-age=60"}, False), + ], + ids=["untraced", "untraced-private", "shared-cacheable"], +) +def test_a_recorded_response_without_a_trace_id_is_reported( + package_dir: Path, headers: dict[str, str], reported: bool +) -> None: + """The server sends x-dfo-trace-id on every API response but one marked + Cache-Control: public, so a recorded response without it is one the + server did not send.""" + + def change(doc: Any) -> None: + kept = doc["exchanges"][0]["response"]["headers"] + del kept["x-dfo-trace-id"] + kept.update(headers) + + _edit(package_dir / _FETCH, change) + problems = validator.validate() + found = [p for p in problems if "carries no x-dfo-trace-id" in p] + assert bool(found) is reported, problems + + +def test_a_retired_code_with_a_row_is_reported(package_dir: Path) -> None: + _edit(validator.REGISTRY_PATH, _retire("spec_not_found")) + problems = validator.validate() + assert any("'spec_not_found' is retired refusal" in p for p in problems), problems + + +def test_a_missing_body_file_is_reported(package_dir: Path) -> None: + (package_dir / "scenarios" / "fetch-spec-known-sentence.parquet").unlink() + problems = validator.validate() + assert any("is missing" in p for p in problems), problems + assert validator.main() == 1 + + +def test_a_symlinked_body_file_is_reported(package_dir: Path, tmp_path: Path) -> None: + body = package_dir / "scenarios" / "fetch-spec-known-sentence.parquet" + outside = tmp_path / "outside.parquet" + body.rename(outside) + body.symlink_to(outside) + problems = validator.validate() + assert any( + "'fetch-spec-known-sentence.parquet'" in p and "is a symlink" in p + for p in problems + ), problems + assert validator.main() == 1 + + +def test_an_orphan_body_file_is_reported(package_dir: Path) -> None: + (package_dir / "scenarios" / "stray.parquet").write_bytes(b"") + problems = validator.validate() + assert any("no scenario names this body file" in p for p in problems), problems + + +_ASSUMED = {"kind": "place_scope", "binding_ref": "where:", "text": "every place"} + + +@pytest.mark.parametrize( + ("item", "read"), + [ + (_ASSUMED, _ASSUMED), + ({**_ASSUMED, "refs": ["a", 1, None]}, {**_ASSUMED, "refs": ["a"]}), + ({**_ASSUMED, "refs": "a"}, _ASSUMED), + ({**_ASSUMED, "refs": None}, _ASSUMED), + ({**_ASSUMED, "note": "x"}, _ASSUMED), + ({**_ASSUMED, "text": None}, None), + ({"kind": "place_scope", "text": "every place"}, None), + ("assumed", None), + ], + ids=[ + "whole", + "refs-string-items", + "refs-not-a-list", + "refs-null", + "unknown-member", + "text-null", + "binding-ref-missing", + "not-an-object", + ], +) +def test_an_assumption_reads_as_its_schema_members(item: Any, read: Any) -> None: + assert validator.read_assumption(item) == read + + +_RANK = {"verb": "rank", "phrase": "top 5 donors"} + + +@pytest.mark.parametrize( + ("item", "read"), + [ + ( + {**_RANK, "over": "place", "target_year": 2020}, + {**_RANK, "over": "place", "target_year": 2020}, + ), + ( + {**_RANK, "over": None, "target_year": None}, + {**_RANK, "over": None, "target_year": None}, + ), + ({**_RANK, "over": 3, "target_year": True}, _RANK), + ({**_RANK, "target_year": 2020.0}, {**_RANK, "target_year": 2020}), + ({**_RANK, "target_year": 2020.5}, _RANK), + ({**_RANK, "note": "x"}, _RANK), + ({"verb": 7, "phrase": "top 5 donors"}, None), + ({"verb": "rank"}, None), + (42, None), + ], + ids=[ + "whole", + "optional-null", + "optional-of-another-type", + "target-year-a-whole-float", + "target-year-fractional", + "unknown-member", + "verb-a-number", + "phrase-missing", + "not-an-object", + ], +) +def test_an_operation_reads_as_its_schema_members(item: Any, read: Any) -> None: + # JSON text tells 2020 from 2020.0, which compare equal in Python. + assert json.dumps(validator.read_operation(item)) == json.dumps(read) + + +def test_an_assumptions_list_with_no_item_read_echoes_empty() -> None: + """A list none of whose items reads still states that the reading assumed + nothing, where a part with no list posts no assumptions.""" + spec = {"spec_id": "spec_a"} + part = {"status": "definite", "assumptions": [7, {**_ASSUMED, "kind": 1}]} + assert validator.reading_echo(part, spec) == [] + assert validator.reading_echo({"status": "definite"}, spec) is None + + +def _answer(*parts: dict[str, Any]) -> Any: + return validator.answer_from_body({"kind": "resolution", "parts": list(parts)}) + + +@pytest.mark.parametrize( + ("operations", "hints"), + [ + ([_RANK], {'Not done: rank ("top 5 donors")': "rank"}), + ( + [{**_RANK, "phrase": "aide au Sénégal"}], + {'Not done: rank ("aide au Sénégal")': "rank"}, + ), + ([{**_RANK, "phrase": 5}, "rank"], {}), + ], + ids=["ascii-phrase", "non-ascii-phrase", "operation-not-read"], +) +def test_an_operation_not_done_is_one_hint( + operations: list[Any], hints: dict[str, str] +) -> None: + """The phrase is quoted as JSON with its characters kept, as both clients + quote it, and an operation that does not read gives no hint.""" + spec = {"spec_id": "spec_a", "definition": {"spec_id": "spec_a"}} + answer = _answer({"status": "definite", "spec": spec, "operations": operations}) + assert validator.reading_hints(answer) == hints + + +def _candidate(**resolved: Any) -> dict[str, Any]: + return { + "spec_id": "spec_a", + "definition": {"spec_id": "spec_a"}, + "resolved": resolved, + } + + +@pytest.mark.parametrize( + "part", + [ + {"status": "candidates", "candidates": {"specs": [_candidate()] * 2}}, + { + "status": "no_data", + "no_data": {"reason": "r", "options": [{"label": "a"}, {"label": "b"}]}, + }, + ], + ids=["candidate", "no-data-option"], +) +@pytest.mark.parametrize( + ("key", "option"), + [(0, True), (0, False), (True, 0), (False, 0)], + ids=["option-true", "option-false", "part-true", "part-false"], +) +def test_a_boolean_part_or_option_is_neither_an_index_nor_a_label( + part: dict[str, Any], key: int | bool, option: int | bool +) -> None: + """Each boolean would name a gap or option as 0 or 1 if read as an index.""" + with pytest.raises(validator.ClientError) as raised: + validator.choice_for(_answer(part, part), {}, key, option) + assert raised.value.code == "choice_invalid" + + +@pytest.mark.parametrize( + ("value", "kind"), + [(1, "integer"), (1.0, "integer"), (1.5, "number"), (True, "boolean")], + ids=["integer", "whole-float", "fractional", "boolean"], +) +def test_a_number_with_no_fractional_part_is_an_integer(value: Any, kind: str) -> None: + assert validator.json_type(value) == kind + + +@pytest.mark.parametrize( + ("schema_version", "gaps"), + [ + (1, []), + (1.0, []), + (1.5, ["/definition/schema_version"]), + (True, ["/definition/schema_version"]), + ], + ids=["integer", "whole-float", "fractional", "boolean"], +) +def test_a_manifest_schema_version_is_an_integer( + schema_version: Any, gaps: list[str] +) -> None: + """The oracle's strict check and the ref schema agree on what an integer + `schema_version` is.""" + package = validator.PACKAGE_DIR + openapi = json.loads((package / "served" / "openapi.json").read_text("utf-8")) + strict = json.loads((package / "strict-fields.json").read_text("utf-8")) + record = json.loads((package / _FETCH).read_text("utf-8")) + manifest = copy.deepcopy(record["exchanges"][0]["response"]["json"]) + manifest["definition"]["schema_version"] = schema_version + members = validator._strict_members(strict) + schema = {"$ref": "#/components/schemas/Manifest"} + assert validator.strict_gaps(openapi, members, schema, manifest) == gaps + + ref = json.loads((package / "refs" / "ref-one-member.json").read_text("utf-8")) + ref["ref"]["members"][0]["spec"]["definition"]["schema_version"] = schema_version + ref_schema = json.loads((package / "dataset-ref.schema.json").read_text("utf-8")) + accepted = validator.jsonschema.Draft202012Validator(ref_schema).is_valid( + ref["ref"] + ) + assert accepted == (not gaps) + + +@pytest.mark.parametrize( + ("resolved", "label"), + [ + ( + { + "sentence_plan": [ + {"segment": "heading", "text": " Aid "}, + {"text": "to Kenya "}, + {"segment": "assumptions", "text": "every donor"}, + ], + "rendered_sentence": "Aid to Kenya, every donor.", + }, + "Aid to Kenya", + ), + ( + { + "sentence_plan": [{"segment": "assumptions", "text": "every donor"}], + "rendered_sentence": "Aid to Kenya, every donor.", + }, + "Aid to Kenya, every donor.", + ), + ({}, None), + ], + ids=["segment-less-token-in-heading", "rendered-sentence-fallback", "neither"], +) +def test_a_candidate_label_is_its_heading_or_its_sentence( + resolved: dict[str, Any], label: str | None +) -> None: + assert validator.candidate_label(_candidate(**resolved)) == label + + +def test_a_required_member_that_admits_null_stays_required() -> None: + """A recorded body must carry a required member, null or not.""" + served = validator.PACKAGE_DIR / "served" / "openapi.json" + routes = validator._Routes(json.loads(served.read_text(encoding="utf-8"))) + page = "/components/schemas/DatasetVersionsPage" + body = {"spec_id": "spec_" + "0" * 32, "versions": [], "complete": True} + assert routes.validate(page, {**body, "next_cursor": None}) == [] + problems = routes.validate(page, body) + assert any("'next_cursor' is a required property" in p for p in problems) + + +def test_no_scenarios_is_a_hard_failure(package_dir: Path) -> None: + for path in (package_dir / "scenarios").iterdir(): + path.unlink() + assert "scenarios: no scenario records found" in validator.validate() + + +_OPERATION_ID = "op_" + "a" * 64 + + +def _write_long_build(package_dir: Path, kind: str) -> Path: + """A synthetic record in which fetch-spec-known-sentence's build answers + 202 and two polls finish it, the first after the 202's 1.5 s pacing and + the second after a 1 s backoff. `rate_limited` adds a 429 with + Retry-After 3 before the first poll; `resubmitted` has the first poll + answer a retryable failed operation and the build posted again.""" + scenarios = package_dir / "scenarios" + parent = json.loads( + (scenarios / "fetch-spec-known-sentence.json").read_text(encoding="utf-8") + ) + build, files, signed = parent["exchanges"] + operation = { + "operation_id": _OPERATION_ID, + "status": "pending", + "poll": f"/api/datasets/operations/{_OPERATION_ID}", + "retry_after_ms": 1500, + } + poll = {"method": "GET", "path": f"/datasets/operations/{_OPERATION_ID}"} + + def polled(status: str, **members: Any) -> dict[str, Any]: + resource = { + "operation": {**operation, "status": status, "retry_after_ms": None} + } + return { + "request": poll, + "response": {"status": 200, "json": resource | members}, + } + + started = { + "request": build["request"], + "response": {"status": 202, "json": {"operation": operation}}, + } + polls = [polled("running"), polled("done", manifest=build["response"]["json"])] + waits = [1.5, 1.0] + resubmissions = 0 + if kind == "rate_limited": + polls.insert( + 0, + { + "request": poll, + "response": {"status": 429, "headers": {"retry-after": "3"}}, + }, + ) + waits = [1.5, 3.0, 1.0] + elif kind == "resubmitted": + error = { + "type": "/codes/operation_failed", + "title": "Internal Server Error", + "status": 500, + "detail": "The build's worker stopped.", + "code": "operation_failed", + "trace_id": "0" * 32, + "capability_version": "synthetic", + "retryable": True, + } + polls[:0] = [polled("failed", error=error), started] + waits = [1.5, 1.5, 1.0] + resubmissions = 1 + outcome = copy.deepcopy(parent["expect"][0]) + outcome["dataset"]["long_builds"] = [ + { + "operation_id": _OPERATION_ID, + "poll_waits": waits, + "resubmissions": resubmissions, + } + ] + record = { + "format_version": 1, + "name": "fetch-spec-long-build", + "description": "The parent's build runs on as an operation.", + "origin": { + "kind": "synthetic", + "derived_from": "fetch-spec-known-sentence", + "edit": "The build answers 202, and polls finish it.", + }, + "call": parent["call"], + "exchanges": [started, *polls, files, signed], + "expect": [outcome], + } + path = scenarios / "fetch-spec-long-build.json" + path.write_text(json.dumps(record), encoding="utf-8") + return path + + +def _long_builds(change: Callable[[Any], None]) -> Callable[[Any], None]: + return _set_outcome(0, lambda o: change(o["dataset"]["long_builds"][0])) + + +@pytest.mark.parametrize("kind", ["plain", "rate_limited", "resubmitted"]) +def test_a_long_build_record_is_valid(package_dir: Path, kind: str) -> None: + _write_long_build(package_dir, kind) + assert validator.validate() == [] + + +@pytest.mark.parametrize( + ("kind", "change", "expected"), + [ + ( + "plain", + _long_builds(lambda b: b.update(poll_waits=[1.5, 2.0])), + "step 0 expects", + ), + ( + "plain", + _long_builds(lambda b: b.update(operation_id="op_" + "b" * 64)), + "step 0 expects", + ), + ( + "plain", + _set_outcome(0, lambda o: o["dataset"].pop("long_builds")), + "step 0 expects", + ), + ( + "rate_limited", + _long_builds(lambda b: b.update(poll_waits=[1.5, 1.5, 1.0])), + "step 0 expects", + ), + ( + "resubmitted", + _long_builds(lambda b: b.update(resubmissions=0)), + "step 0 expects", + ), + ( + "resubmitted", + _set_body(1, lambda body: body["error"].update(retryable=False)), + "the steps never make exchanges 2 to 6", + ), + ], + ids=[ + "poll-waits-without-backoff", + "long-build-other-operation", + "long-build-unnamed", + "rate-limited-poll-without-its-wait", + "resubmission-uncounted", + "failed-operation-not-retryable", + ], +) +def test_a_broken_long_build_is_reported( + package_dir: Path, kind: str, change: Callable[[Any], None], expected: str +) -> None: + _edit(_write_long_build(package_dir, kind), change) + problems = validator.validate() + assert any(expected in problem for problem in problems), problems diff --git a/tools/validate_client_contract.py b/tools/validate_client_contract.py new file mode 100644 index 0000000..64a2174 --- /dev/null +++ b/tools/validate_client_contract.py @@ -0,0 +1,3360 @@ +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "jsonschema>=4.23", +# ] +# /// +"""Validate the client contract under +`python/client-contract/src/dfo_client_contract/`. + +Usage: + uv run tools/validate_client_contract.py + +Checks that every packaged schema is valid draft 2020-12 and that every +document validates against its schema, then what the schemas cannot express: + +- `served/SOURCE.json` names a 40-character dfo-apis commit, and + `served/openapi.json` holds routes under each of SURFACE_PREFIXES and none + outside them and PLATFORM_PREFIXES. +- Every `strict-fields.json` pointer resolves in `served/openapi.json` and + names each property once. A required entry's property stays in its schema's + `required` list and admits no null. An enum entry's property admits every + value listed. +- `actions.json` lists codes in order, each once. Every active refusal code in + `registries/codes.json` with a `problem_details` or `no_data_reason` mapping + has a row, and no row names another code. A row carries `gap_kind` exactly + when its code has a `no_data_reason` mapping. The `choose` action goes with + the `choice` gap kind and only with it. A code with a `problem_details` + mapping takes an action a problem document can carry. +- `client-codes.json` lists codes in order, each once, none of them a code in + `actions.json` or `registries/codes.json`. Each row's class is one a + scenario's error may name, other than a warning's, and only + `refusal_without_code` takes the class its status maps to, and its + retryable flag `by_status`. Each reason the key-lookup rule raises is a + row of class `AuthenticationError`. +- `proxy-codes.json` and `warning-codes.json` list codes in order, each once, + none of them a code another table or `registries/codes.json` holds, and the + warning codes are those the client rules issue: `route_deprecated`, + `server_warning`, and one `key_` per key-format reason. +- Each scenario's file name matches its `name`, names are unique, `expect` + holds one outcome per step, a step that acts on an earlier result follows + one, a synthetic scenario derives from a recorded one, and every body file + exists and is the scenario's own or, for a synthetic scenario, one its + parent names. In a recorded scenario each API request matches a route and + method in `served/openapi.json`, its JSON body validates against the + route's request schema, each JSON response body validates against the + route's schema for its status, a required member included when it admits + null, and its `origin.dfo_commit` is `served/SOURCE.json`'s commit. In + every scenario a problem document's `code`, a failed operation's error + included, is an active code registered with its status, and the website + proxy's `error` a code `proxy-codes.json` lists with its status. +- Each error a scenario expects, other than a `SearchWarning` or + `DataWarning`, carries a refusal's code from its exchanges, a failed + operation's included, or a client code of its class. +- Each scenario's `expect` equals the outcomes its steps reach over its + exchanges, with refusals' error classes and gap kinds from `actions.json` + and the class of each error the client raises itself from + `client-codes.json`, as `expected_outcomes` derives them, the waits + before each poll included, under the record's base URL and again under + REPLAY_ORIGIN with the recorded origin a response names moved there. A + dataset's rows, columns and per-part row counts are left to the Parquet + bodies, and each download hashes to its artifact's digest or the outcome + says it does not. Each Search request a + record holds posts the input the steps derive: the question, a choice's + data_query or dataset_resubmit entries, or a member's identity with the + entity groups of the roles its build left bound as they were, and each + build posts the body `build_body` gives for the spec the step builds, its + narrowing and its layout, and each Search request the whole body + `search_body` gives. A POST carries its body, a refused request repeated is + a retry only as `may_retry` allows, a record that ends a run of retries + while `may_retry` holds does not fit, each poll names the operation the + client holds, each files route is where `artifact_route` places the + artifact's `url`, and each signed download is where `download_target` + places the `location` the files route answered. The outcomes give the waits + before retries and the warnings response headers issue. Every absolute URL + a record holds, a `url` request or a `location` header, is a signed URL on + the storage host with the query `X-Goog-Signature=redacted`, or a + `location` under the base URL. +- Each ref example's file name matches its `name` and gets the verdict it + states: from `dataset-ref.schema.json`, then from the rules that each + member's definition carries its own `spec_id` and that members hold + distinct `spec_id`s. +- Each rule file under `rules/` validates against `rules.schema.json`, names + the rule its file name names, and names each vector once. + +It does not import `dfo_client_contract`, whose tests replay +the rule vectors. `tools/capture_client_contract.py` imports the outcome +rules from here, so the records are written by the code that checks them. +""" + +from __future__ import annotations + +import hashlib +import json +import re +import sys +from collections.abc import Callable, Iterator, Mapping, Sequence +from dataclasses import dataclass, field, replace +from functools import partial +from pathlib import Path +from typing import Any +from urllib.parse import urljoin, urlsplit, urlunsplit + +import jsonschema +from referencing import Registry, Resource +from referencing.jsonschema import DRAFT202012 + +REPO_ROOT = Path(__file__).resolve().parent.parent +PACKAGE_DIR = REPO_ROOT / "python" / "client-contract" / "src" / "dfo_client_contract" +REGISTRY_PATH = REPO_ROOT / "registries" / "codes.json" + +_OPENAPI_URI = "urn:dfo-client-contract:served-openapi" +_ACTION_CHANNELS = {"problem_details", "no_data_reason"} +_ANSWER_ONLY_ACTIONS = {"choose", "ask_data_question"} +# The steps each step that acts on an earlier result may follow. A fetch of the +# answer acts on the last search or choice, so it may follow another such fetch. +_ACTS_ON_PREVIOUS = { + "choose": {"search", "choose"}, + "fetch_answer": {"search", "choose", "fetch_answer"}, + "result": {"mint", "operation"}, +} +_STRICT_POINTER = re.compile(r"^/components/schemas/([^/]+)/properties/([^/]+)$") + + +def _reject_duplicate_keys(pairs: list[tuple[str, Any]]) -> dict[str, Any]: + keys = [key for key, _ in pairs] + duplicates = sorted({key for key in keys if keys.count(key) > 1}) + if duplicates: + raise ValueError(f"duplicate keys {duplicates}") + return dict(pairs) + + +def _load(path: Path) -> Any: + return json.loads( + path.read_text(encoding="utf-8"), object_pairs_hook=_reject_duplicate_keys + ) + + +def _where(error: jsonschema.ValidationError) -> str: + return "/".join(str(part) for part in error.absolute_path) or "" + + +def _schema_problems( + label: str, validator: jsonschema.Draft202012Validator, document: Any +) -> list[str]: + return [ + f"{label}: schema: {_where(error)}: {error.message}" + for error in sorted( + validator.iter_errors(document), key=lambda e: list(e.absolute_path) + ) + ] + + +def _contract_validators() -> dict[str, jsonschema.Draft202012Validator]: + """One validator per packaged schema, sharing a registry so the scenario + schema's `$ref` to `dataset-ref.schema.json` resolves by `$id`.""" + names = ( + "strict-fields.schema.json", + "actions.schema.json", + "client-codes.schema.json", + "proxy-codes.schema.json", + "warning-codes.schema.json", + "scenario.schema.json", + "dataset-ref.schema.json", + "rules/rules.schema.json", + ) + schemas = {name: _load(PACKAGE_DIR / name) for name in names} + for schema in schemas.values(): + jsonschema.Draft202012Validator.check_schema(schema) + registry = Registry().with_resources( + (schema["$id"], Resource.from_contents(schema)) for schema in schemas.values() + ) + return { + name: jsonschema.Draft202012Validator( + schema, + registry=registry, + format_checker=jsonschema.Draft202012Validator.FORMAT_CHECKER, + ) + for name, schema in schemas.items() + } + + +# --- the served document ---------------------------------------------------- + + +def _resolve(document: Any, pointer: str) -> Any: + """The value at an RFC 6901 `pointer` in `document`. Raises `KeyError`.""" + node = document + for raw in pointer.split("/")[1:]: + token = raw.replace("~1", "/").replace("~0", "~") + if isinstance(node, list): + if not token.isdigit() or int(token) >= len(node): + raise KeyError(pointer) + node = node[int(token)] + elif isinstance(node, dict) and token in node: + node = node[token] + else: + raise KeyError(pointer) + return node + + +def _expand(openapi: dict[str, Any], schema: Any) -> Iterator[dict[str, Any]]: + """`schema` and every schema its `$ref`, `anyOf`, `oneOf` and `allOf` + reach, local references followed through `openapi`.""" + if not isinstance(schema, dict): + return + yield schema + ref = schema.get("$ref") + if isinstance(ref, str) and ref.startswith("#/"): + yield from _expand(openapi, _resolve(openapi, ref[1:])) + for keyword in ("anyOf", "oneOf", "allOf"): + for branch in schema.get(keyword, []): + yield from _expand(openapi, branch) + + +def _openapi_registry(openapi: dict[str, Any]) -> Registry: + return Registry().with_resource(_OPENAPI_URI, DRAFT202012.create_resource(openapi)) + + +def _admits_null(registry: Registry, pointer: str) -> bool: + """Whether the schema at `pointer` accepts null. A schema with no type, + or a union with an open branch, accepts null as well as one that names + it.""" + schema = {"$ref": f"{_OPENAPI_URI}#{pointer}"} + return jsonschema.Draft202012Validator(schema, registry=registry).is_valid(None) + + +def _allowed_values(openapi: dict[str, Any], schema: Any) -> set[str]: + values: set[str] = set() + for branch in _expand(openapi, schema): + if "const" in branch: + values.add(branch["const"]) + values.update(branch.get("enum", [])) + return values + + +# The route prefixes of the surfaces the deployed composition mounts, and of +# the platform routes beside them. The served document holds these and only +# these. +SURFACE_PREFIXES = ("/api/search", "/api/datasets", "/api/graph", "/api/presentation") +PLATFORM_PREFIXES = ("/codes",) + + +def surface_problems(openapi: Mapping[str, Any]) -> list[str]: + """A surface of SURFACE_PREFIXES the document lacks, and a path under no + surface or platform prefix.""" + + def under(path: str, prefix: str) -> bool: + return path == prefix or path.startswith(prefix + "/") + + paths = list(openapi.get("paths", {})) + problems = [ + f"served/openapi.json: no route under {prefix}, so its surface is not mounted" + for prefix in SURFACE_PREFIXES + if not any(under(path, prefix) for path in paths) + ] + problems.extend( + f"served/openapi.json: {path} is under no deployed surface" + for path in paths + if not any(under(path, p) for p in (*SURFACE_PREFIXES, *PLATFORM_PREFIXES)) + ) + return problems + + +def _check_source(source: Any) -> list[str]: + if not isinstance(source, dict): + return ["served/SOURCE.json: not an object"] + problems = [] + if source.get("format_version") != 1: + problems.append("served/SOURCE.json: format_version is not 1") + if not isinstance(source.get("repository"), str): + problems.append("served/SOURCE.json: repository is not a string") + if not re.fullmatch(r"[0-9a-f]{40}", str(source.get("commit"))): + problems.append("served/SOURCE.json: commit is not a 40-character sha") + if not isinstance(source.get("captured_from"), str): + problems.append("served/SOURCE.json: captured_from is not a string") + return problems + + +def _check_strict_fields( + document: dict[str, Any], openapi: dict[str, Any] +) -> list[str]: + problems = [] + registry = _openapi_registry(openapi) + for kind in ("required", "enums"): + pointers = [entry["pointer"] for entry in document[kind]] + problems.extend( + f"strict-fields.json: {kind}: {pointer} is listed twice" + for pointer in sorted({p for p in pointers if pointers.count(p) > 1}) + ) + for entry in document[kind]: + pointer = entry["pointer"] + try: + prop = _resolve(openapi, pointer) + except KeyError: + problems.append( + f"strict-fields.json: {pointer} does not resolve in " + "served/openapi.json" + ) + continue + if kind == "enums": + missing = [ + v + for v in entry["values"] + if v not in _allowed_values(openapi, prop) + ] + if missing: + problems.append( + f"strict-fields.json: {pointer} no longer admits {missing}" + ) + continue + match = _STRICT_POINTER.match(pointer) + if match is None: # the strict-fields schema pins the pointer form + continue + schema_name, field = match.groups() + required = openapi["components"]["schemas"][schema_name].get("required", []) + if field not in required: + problems.append( + f"strict-fields.json: {pointer} is not required in {schema_name}" + ) + if _admits_null(registry, pointer): + problems.append(f"strict-fields.json: {pointer} admits null") + return problems + + +# --- actions ---------------------------------------------------------------- + + +def _check_actions(document: dict[str, Any], registry: dict[str, Any]) -> list[str]: + rows = document["codes"] + codes = [row["code"] for row in rows] + problems = [ + f"actions.json: code {code!r} is listed twice" + for code in sorted({c for c in codes if codes.count(c) > 1}) + ] + if codes != sorted(codes): + problems.append("actions.json: codes are not sorted") + + entries = {entry["code"]: entry for entry in registry["entries"]} + channels = { + code: {mapping["channel"] for mapping in entry["mappings"]} + for code, entry in entries.items() + } + expected = { + code + for code, entry in entries.items() + if entry["lifecycle"] == "active" + and entry["classification"] == "refusal" + and channels[code] & _ACTION_CHANNELS + } + problems.extend( + f"actions.json: active code {code!r} has no row" + for code in sorted(expected - set(codes)) + ) + for row in rows: + code = row["code"] + entry = entries.get(code) + if entry is None: + problems.append(f"actions.json: {code!r} is not in the registry") + continue + if code not in expected: + problems.append( + f"actions.json: {code!r} is {entry['lifecycle']} " + f"{entry['classification']} on {sorted(channels[code])}, outside " + "the active refusals on problem_details and no_data_reason" + ) + continue + on_no_data = "no_data_reason" in channels[code] + if on_no_data != ("gap_kind" in row): + problems.append( + f"actions.json: {code!r} must carry gap_kind exactly when it maps " + "to no_data_reason" + ) + if (row["action"] == "choose") != (row.get("gap_kind") == "choice"): + problems.append( + f"actions.json: {code!r} pairs action {row['action']!r} with " + f"gap_kind {row.get('gap_kind')!r}; choose goes with choice only" + ) + if "problem_details" in channels[code] and row["action"] in ( + _ANSWER_ONLY_ACTIONS + ): + problems.append( + f"actions.json: {code!r} reaches problem documents, which cannot " + f"carry action {row['action']!r}" + ) + return problems + + +# --- client codes ----------------------------------------------------------- + + +def error_classes(scenario_schema: dict[str, Any]) -> list[str]: + """The error classes a scenario's error outcome may name.""" + return scenario_schema["$defs"]["error"]["properties"]["class"]["enum"] + + +def _check_client_codes( + document: dict[str, Any], + actions: dict[str, Any], + registry: dict[str, Any], + classes: Sequence[str], + lookup_reasons: Sequence[str], +) -> list[str]: + codes = [row["code"] for row in document["codes"]] + problems = [ + f"client-codes.json: code {code!r} is listed twice" + for code in sorted({c for c in codes if codes.count(c) > 1}) + ] + if codes != sorted(codes): + problems.append("client-codes.json: codes are not sorted") + taken = { + "actions.json": {row["code"] for row in actions["codes"]}, + "registries/codes.json": {entry["code"] for entry in registry["entries"]}, + } + for source, server_codes in taken.items(): + problems.extend( + f"client-codes.json: {code!r} is also a code in {source}" + for code in sorted(set(codes) & server_codes) + ) + # A warning raised under strict carries the server's code. + known = {*classes, BY_STATUS} - set(WARNING_CLASSES) + problems.extend( + f"client-codes.json: {row['code']!r} raises {row['class']!r}, a class " + "no scenario names" + for row in document["codes"] + if row["class"] not in known + ) + by_status = [row["code"] for row in document["codes"] if row["class"] == BY_STATUS] + if by_status != [REFUSAL_WITHOUT_CODE]: + problems.append( + f"client-codes.json: {by_status} take the class {BY_STATUS}, where " + f"{REFUSAL_WITHOUT_CODE!r} alone does" + ) + problems.extend( + f"client-codes.json: {row['code']!r} takes its retryable flag " + f"{BY_STATUS} exactly when it takes its class {BY_STATUS}" + for row in document["codes"] + if (row["retryable"] == BY_STATUS) != (row["class"] == BY_STATUS) + ) + classes_by_code = {row["code"]: row["class"] for row in document["codes"]} + for reason in lookup_reasons: + found = classes_by_code.get(reason) + if found is None: + problems.append( + f"client-codes.json: no row for {reason!r}, an error the " + "key-lookup rule raises" + ) + elif found != KEY_LOOKUP_CLASS: + problems.append( + f"client-codes.json: {reason!r}, an error the key-lookup rule " + f"raises, takes {found!r}, not {KEY_LOOKUP_CLASS!r}" + ) + return problems + + +def _sorted_once(label: str, codes: Sequence[str]) -> list[str]: + problems = [ + f"{label}: code {code!r} is listed twice" + for code in sorted({c for c in codes if codes.count(c) > 1}) + ] + if list(codes) != sorted(codes): + problems.append(f"{label}: codes are not sorted") + return problems + + +def _check_other_codes( + label: str, codes: Sequence[str], taken: Mapping[str, set[str]] +) -> list[str]: + """A code table's codes are sorted, listed once, and none is a code + another table or the registry holds.""" + problems = _sorted_once(label, codes) + for source, others in taken.items(): + problems.extend( + f"{label}: {code!r} is also a code in {source}" + for code in sorted(set(codes) & others) + ) + return problems + + +def _check_warning_codes( + document: dict[str, Any], + taken: Mapping[str, set[str]], + key_reasons: Sequence[str], +) -> list[str]: + """As `_check_other_codes`, and the codes are those a client's rules + issue: each header warning, and one `key_` warning per + key-format reason.""" + codes = [row["code"] for row in document["codes"]] + problems = _check_other_codes("warning-codes.json", codes, taken) + wanted = {ROUTE_DEPRECATED, SERVER_WARNING, *(f"key_{r}" for r in key_reasons)} + problems.extend( + f"warning-codes.json: no row for {code!r}, a warning a client issues" + for code in sorted(wanted - set(codes)) + ) + problems.extend( + f"warning-codes.json: {code!r} is a warning no rule issues" + for code in sorted(set(codes) - wanted) + ) + return problems + + +def key_format_reasons(rules_schema: Mapping[str, Any]) -> list[str]: + """The reasons the key-format rule warns with.""" + vectors = rules_schema["$defs"]["key_format"]["properties"]["vectors"] + return vectors["items"]["properties"]["reason"]["enum"] + + +# The class of every error the key-lookup rule raises. +KEY_LOOKUP_CLASS = "AuthenticationError" + + +def key_lookup_reasons(rules_schema: Mapping[str, Any]) -> list[str]: + """The reasons the key-lookup rule raises an error with.""" + vectors = rules_schema["$defs"]["key_lookup"]["properties"]["vectors"] + error = vectors["items"]["properties"]["error"] + return error["properties"]["reason"]["enum"] + + +# --- scenarios -------------------------------------------------------------- + + +class _Routes: + """The served document's routes, matched against concrete paths.""" + + def __init__(self, openapi: dict[str, Any]) -> None: + self.openapi = openapi + self._templates = [(t, t.split("/")) for t in openapi["paths"]] + self._registry = _openapi_registry(openapi) + + def template(self, path: str) -> str | None: + """The route template matching `path`, preferring a literal segment + over a parameter, as the server's router does.""" + segments = path.split("/") + matches = [ + template + for template, parts in self._templates + if len(parts) == len(segments) + and all( + part == segment or (part.startswith("{") and bool(segment)) + for part, segment in zip(parts, segments, strict=True) + ) + ] + return min(matches, key=lambda t: t.count("{"), default=None) + + def operation( + self, base_path: str, request: dict[str, Any] + ) -> tuple[str, str, dict[str, Any] | None] | None: + """The route template an API request matches, its method's JSON + pointer under `/paths`, and the operation it serves. None for a + request outside the API or one that matches no route.""" + if "url" in request: + return None + template = self.template(_api_path(base_path, request)) + if template is None: + return None + method = request["method"].lower() + route = f"/paths/{_pointer_token(template)}/{method}" + return template, route, self.openapi["paths"][template].get(method) + + def response_schema( + self, base_path: str, request: dict[str, Any], status: int + ) -> dict[str, Any] | None: + """The JSON body schema `request`'s route declares for `status`.""" + found = self.operation(base_path, request) + if found is None or found[2] is None: + return None + responses = found[2].get("responses", {}) + declared = str(status) if str(status) in responses else "default" + content = responses.get(declared, {}).get("content", {}) + media = _body_schema(content) + return None if media is None else content[media].get("schema") + + def validate(self, pointer: str, body: Any) -> list[str]: + validator = jsonschema.Draft202012Validator( + {"$ref": f"{_OPENAPI_URI}#{pointer}"}, registry=self._registry + ) + return [ + f"{_where(error)}: {error.message[:300]}" + for error in validator.iter_errors(body) + ] + + +def _api_path(base_path: str, request: dict[str, Any]) -> str: + """The path an API request reaches: a `path` under the base URL's path, + or an `origin_path` as it stands.""" + raw = base_path + request["path"] if "path" in request else request["origin_path"] + return urlsplit(raw).path + + +def _pointer_token(text: str) -> str: + return text.replace("~", "~0").replace("/", "~1") + + +def _body_schema(content: dict[str, Any]) -> str | None: + for media in ("application/json", "application/problem+json"): + if media in content: + return media + return None + + +def _check_exchange( + label: str, + exchange: dict[str, Any], + base_path: str, + routes: _Routes, + registry: dict[str, Any], + proxy_codes: Mapping[str, Mapping[str, Any]], +) -> list[str]: + request, response = exchange["request"], exchange["response"] + if "url" in request: + return [] + found = routes.operation(base_path, request) + if found is None: + path = _api_path(base_path, request) + return [f"{label}: {path} matches no route in served/openapi.json"] + template, route, operation = found + if operation is None: + return [f"{label}: {template} serves no {request['method']}"] + + problems = [] + if "json" in request: + media = _body_schema(operation.get("requestBody", {}).get("content", {})) + if media is None: + problems.append(f"{label}: {template} takes no JSON request body") + else: + pointer = f"{route}/requestBody/content/{_pointer_token(media)}/schema" + problems.extend( + f"{label}: request body: {problem}" + for problem in routes.validate(pointer, request["json"]) + ) + + responses = operation.get("responses", {}) + status = str(response["status"]) + declared = status if status in responses else "default" + if declared not in responses: + return [*problems, f"{label}: {template} declares no {status} response"] + if "json" in response: + media = _body_schema(responses[declared].get("content", {})) + if media is None: + problems.append(f"{label}: {template} {status} has no JSON body") + else: + pointer = ( + f"{route}/responses/{declared}/content/{_pointer_token(media)}/schema" + ) + problems.extend( + f"{label}: response body: {problem}" + for problem in routes.validate(pointer, response["json"]) + ) + problems.extend(_check_problem_code(label, response, registry, proxy_codes)) + return problems + + +def _check_problem_code( + label: str, + response: dict[str, Any], + registry: dict[str, Any], + proxy_codes: Mapping[str, Mapping[str, Any]], +) -> list[str]: + """A refusal's code: a problem document's is an active registry code + registered with its status, and the website proxy's `error` is a code + `proxy-codes.json` lists with its status.""" + body = response.get("json") + if response["status"] < 400 or not isinstance(body, dict): + return [] + if "code" not in body: + if "error" not in body: + return [] + error = body["error"] + row = proxy_codes.get(error) if isinstance(error, str) else None + if row is None or row["status"] != response["status"]: + return [ + ( + f"{label}: proxy code {body['error']!r} is not a code " + f"proxy-codes.json lists with status {response['status']}" + ) + ] + return [] + for entry in registry["entries"]: + if entry["code"] != body["code"]: + continue + statuses = { + m.get("http_status") + for m in entry["mappings"] + if m["channel"] == "problem_details" + } + if entry["lifecycle"] != "active" or response["status"] not in statuses: + return [ + ( + f"{label}: problem code {body['code']!r} is not an active code " + f"registered with status {response['status']}" + ) + ] + return [] + return [f"{label}: problem code {body['code']!r} is not in the registry"] + + +# --- outcomes --------------------------------------------------------------- +# +# A client's outcome for each step follows from the exchanges and from +# `actions.json`. The functions here derive it. The validator checks each +# record's `expect` against them, and `tools/capture_client_contract.py` +# imports them to write `expect` when it records. + +# The class each action in actions.json maps to, as the contract README states. +ACTION_CLASSES = { + "fix_request": "InvalidRequestError", + "check_id": "NotFoundError", + "choose": "IncompleteAnswerError", + "ask_data_question": "IncompleteAnswerError", + "take_newest_version": "VersionUnavailableError", + "log_in": "AuthenticationError", + "request_scope": "PermissionDeniedError", + "wait": "RateLimitError", + "wait_for_reset": "QuotaExceededError", + "report": "ServerError", + "upgrade": "ContractError", +} +# The class of a refusal whose code has no row, by HTTP status. Any other 5xx +# is a ServerError and any other 4xx an InvalidRequestError. +STATUS_CLASSES = { + 400: "InvalidRequestError", + 401: "AuthenticationError", + 403: "PermissionDeniedError", + 404: "NotFoundError", + 408: "DfoTimeoutError", + 410: "NotFoundError", + 422: "InvalidRequestError", + 429: "RateLimitError", +} +# The statuses a refusal is retried on when its body does not say. +RETRYABLE_STATUSES = frozenset({408, 429, 500, 502, 503, 504}) +# The website proxy's `retry` value that makes its refusal retryable. +_PROXY_RETRY = "retry_after_delay" +# The retries a client makes by default after a retryable refusal. +MAX_RETRIES = 2 +# The status that cuts a synchronous build off at the server's limit. +BUILD_CUT_OFF = 504 + + +def may_retry( + request: Mapping[str, Any], responses: Sequence[Mapping[str, Any]] +) -> bool: + """Whether a client sends `request` again after `responses`, the answers + to it so far in order: the last is a retryable refusal, the retries made + stay under MAX_RETRIES, and for a build, no earlier answer was a 504 + cut-off, after which the build is posted once more only. So a build + refused 504 then 503 raises the 503, and one refused 503 then 504 is + posted once more after the 504.""" + *earlier, response = responses + status = response["status"] + if status < 400 or not retryable(status, problem_body(response)): + return False + if len(earlier) >= MAX_RETRIES: + return False + build = request["method"] == "POST" and request.get("path") == "/datasets" + return not (build and any(r["status"] == BUILD_CUT_OFF for r in earlier)) + + +# The content types a client reads a refusal's body as a problem document, or +# the website proxy's own body, in. +PROBLEM_MEDIA = ("application/problem+json", "application/json") + + +def problem_body(response: Mapping[str, Any]) -> Any: + """A refusal's JSON body when its content type is one of PROBLEM_MEDIA, + else None. A body in any other type reads as no body.""" + content_type = response.get("headers", {}).get("content-type", "") + media = content_type.split(";", maxsplit=1)[0].strip().lower() + return response.get("json") if media in PROBLEM_MEDIA else None + + +def gap_kinds(actions: Mapping[str, Mapping[str, Any]]) -> dict[str, str]: + """The gap kind of each no_data reason in actions.json, keyed by code.""" + return {code: row["gap_kind"] for code, row in actions.items() if "gap_kind" in row} + + +def refusal_code(body: Any) -> str | None: + """A refusal's code: a problem document's `code`, or the `error` member + of the website proxy's own `{error, retry, detail}` body.""" + if not isinstance(body, dict): + return None + code = body.get("code", body.get("error")) + return code if isinstance(code, str) else None + + +def error_class( + status: int, code: str | None, actions: Mapping[str, Mapping[str, Any]] +) -> str: + """The error class a client raises for a refusal: its code's action, else + its HTTP status.""" + row = actions.get(code) if code is not None else None + if row is not None: + return ACTION_CLASSES[row["action"]] + fallback = "ServerError" if status >= 500 else "InvalidRequestError" + return STATUS_CLASSES.get(status, fallback) + + +def retryable(status: int, body: Any) -> bool: + """Whether a client retries a refusal: as a problem document's `retryable` + says, or the website proxy's `retry`, and otherwise by its status.""" + if isinstance(body, dict): + if "code" not in body and "error" in body: + return body.get("retry") == _PROXY_RETRY + if isinstance(body.get("retryable"), bool): + return body["retryable"] + return status in RETRYABLE_STATUSES + + +def retry_after(headers: Mapping[str, str]) -> float | None: + """The seconds a `Retry-After` header asks for, or None.""" + try: + wait = float(headers.get("retry-after", "")) + except ValueError: + return None + return wait if wait >= 0 else None + + +RETRY_BACKOFF_FIRST = 0.5 +RETRY_BACKOFF_CAP = 8.0 + + +def retry_wait(headers: Mapping[str, str], attempt: int) -> float: + """The wait before retry `attempt` (from 0) of a refused request: the + refusal's `Retry-After`, else a backoff that doubles from 0.5 to 8 + seconds.""" + wait = retry_after(headers) + if wait is not None: + return wait + return min(RETRY_BACKOFF_FIRST * 2**attempt, RETRY_BACKOFF_CAP) + + +# The headers a client warns on, and the warning-codes.json code of each. +DEPRECATION_HEADERS = ("deprecation", "sunset") +ROUTE_DEPRECATED = "route_deprecated" +SERVER_WARNING_HEADER = "x-dfo-warning" +SERVER_WARNING = "server_warning" + + +def header_warnings( + headers: Mapping[str, str], seen: set[tuple[str, ...]] +) -> list[str]: + """The warnings an API response's headers issue, as warning-codes.json + codes, each once per process: a `Deprecation` or `Sunset` header once per + distinct pair of their values, either alone included, and `x-dfo-warning` + once per message. `seen` holds the warnings the process has issued.""" + issued = [] + marks = tuple(headers.get(name, "") for name in DEPRECATION_HEADERS) + if any(marks) and (key := (ROUTE_DEPRECATED, *marks)) not in seen: + seen.add(key) + issued.append(ROUTE_DEPRECATED) + message = headers.get(SERVER_WARNING_HEADER) + if message and (key := (SERVER_WARNING, message)) not in seen: + seen.add(key) + issued.append(SERVER_WARNING) + return issued + + +POLL_BACKOFF_FIRST = 1.0 +POLL_BACKOFF_CAP = 8.0 + + +@dataclass +class PollPacing: + """The wait before each poll of one long build: the `Retry-After` of the + refusal that answered the last poll, whatever its status, else the last + operation resource's `retry_after_ms`, else the `Retry-After` of the + response that carried that resource, else a backoff that doubles from 1 + to 8 seconds and advances one step each time it is used, a poll after a + refusal included.""" + + paced: float | None = None + header: float | None = None + refused: float | None = None + backoff_step: int = 0 + + def took(self, operation: Mapping[str, Any], headers: Mapping[str, str]) -> None: + """An operation resource arrived, with its response's headers.""" + ms = operation.get("retry_after_ms") + number = isinstance(ms, int | float) and not isinstance(ms, bool) + self.paced = ms / 1000 if number and ms >= 0 else None + self.header = retry_after(headers) + + def refused_poll(self, headers: Mapping[str, str]) -> None: + """A refusal the client polls past answered the last poll.""" + self.refused = retry_after(headers) + + def next_wait(self) -> float: + if self.refused is not None: + wait, self.refused = self.refused, None + return wait + if self.paced is not None: + return self.paced + if self.header is not None: + return self.header + wait = min(POLL_BACKOFF_FIRST * 2**self.backoff_step, POLL_BACKOFF_CAP) + self.backoff_step += 1 + return wait + + +# The class of a client code that takes the class its refusal's HTTP status +# maps to, and the client code of a refusal whose body carries no code. +BY_STATUS = "by_status" +REFUSAL_WITHOUT_CODE = "refusal_without_code" + + +def error_outcome(error: str, code: str | None, **members: Any) -> dict[str, Any]: + return {"error": {"class": error, "code": code, **members}} + + +# The warnings a client raises as errors under strict, which carry the +# server's code. +WARNING_CLASSES = ("SearchWarning", "DataWarning") +VERSION_UNAVAILABLE = "VersionUnavailableError" + + +class _Unset: + """The type of UNSET.""" + + +# The trace id of an error raised without one, which `read_from` settles. +UNSET = _Unset() + + +class ClientError(Exception): + """A step ends in an error a client raises. A refusal names its class, + the server's code and its trace id, a SearchWarning or DataWarning names + the server's warning, departure or operation code, and any other error + names a code from `client-codes.json`, whose row gives its class. A + VersionUnavailableError also names the newest version, or None, and the + trace id of the refusal that gave its code. An error raised with no + `trace_id` holds UNSET and takes its id as `read_from` gives.""" + + def __init__( + self, + code: str | None, + *, + error: str | None = None, + newest_version: str | None = None, + trace_id: str | None | _Unset = UNSET, + ) -> None: + super().__init__(f"{error or 'client'} {code}") + self.code = code + self.error = error + self.newest_version = newest_version + self.trace_id = trace_id + + def error_class(self, client_codes: Mapping[str, Mapping[str, Any]]) -> str: + """The error class: the one it names, else its client code's. + + Raises: + ValueError: The code is not a client code of one class. + """ + if self.error is not None: + return self.error + row = client_codes.get(self.code) if self.code is not None else None + if row is None or row["class"] == BY_STATUS: + raise ValueError( + f"{self.code!r} is not a client code of one class in client-codes.json" + ) + return row["class"] + + def outcome(self, client_codes: Mapping[str, Mapping[str, Any]]) -> dict[str, Any]: + """The error outcome, its class from `client_codes` when the error + names none. + + Raises: + ValueError: The code is not a client code of one class. + """ + error = self.error_class(client_codes) + trace = None if isinstance(self.trace_id, _Unset) else self.trace_id + if error == VERSION_UNAVAILABLE: + return error_outcome( + error, + self.code, + trace_id=trace, + newest_version=self.newest_version, + ) + return error_outcome(error, self.code, trace_id=trace) + + +TRACE_HEADER = "x-dfo-trace-id" + + +def trace_id(body: Any, headers: Mapping[str, str] | None) -> str | None: + """A response's trace id: the top-level `trace_id` of `body` when it is + an object holding one, a problem document or any other body, else its + TRACE_HEADER header, else None. A Search answer's `diagnostics.trace_id` + is not read.""" + found = body.get("trace_id") if isinstance(body, dict) else None + if isinstance(found, str) and found: + return found + header = (headers or {}).get(TRACE_HEADER) + return header or None + + +def shared_cacheable(headers: Mapping[str, str]) -> bool: + """Whether a response is marked `Cache-Control: public`. A shared cache + replays it, so it carries no per-request trace id.""" + directives = headers.get("cache-control", "").lower().replace(" ", "").split(",") + return "public" in directives + + +def untraced(headers: Mapping[str, str]) -> bool: + """Whether an API response lacks the TRACE_HEADER header the server sends + on every response but a shared-cacheable one.""" + return TRACE_HEADER not in headers and not shared_cacheable(headers) + + +def refusal_error( + status: int, + body: Any, + actions: Mapping[str, Mapping[str, Any]], + headers: Mapping[str, str] | None = None, +) -> ClientError: + """The error a refusal raises: its code's class and the server's code, or + for a body with no code the class its status maps to and + `refusal_without_code`, with the trace id `trace_id` gives for its body + and `headers`.""" + code = refusal_code(body) + return ClientError( + code or REFUSAL_WITHOUT_CODE, + error=error_class(status, code, actions), + trace_id=trace_id(body, headers), + ) + + +# The codes of the errors a client raises itself that describe a response, +# beside the warnings it raises under strict. Every other client code +# describes the caller's input or a storage-host fetch. +RESPONSE_ERRORS = frozenset( + { + "unexpected_response", + "contract_violation", + "answer_declined", + "answer_incomplete", + } +) + + +def read_from(error: ClientError, trace: str | None) -> ClientError: + """`error`, raised on the API response whose trace id is `trace`. An + error that describes a response, a RESPONSE_ERRORS code, SearchWarning + or DataWarning, takes `trace` unless its trace id is settled. An error that + describes the caller's input, or a storage-host fetch, keeps null.""" + if isinstance(error.trace_id, _Unset): + reads = error.code in RESPONSE_ERRORS or error.error in WARNING_CLASSES + error.trace_id = trace if reads else None + return error + + +# --- reading members no strict pointer names --------------------------------- +# +# A member a client reads that no strict pointer names, and that holds a JSON +# type other than the one its rule reads, reads as absent. So does every +# member of a holder that is not an object. Each read of such a member goes +# through one of these. + + +def read_object(holder: Any, name: str) -> dict[str, Any] | None: + """`holder`'s member `name` when it is an object, else None.""" + value = holder.get(name) if isinstance(holder, dict) else None + return value if isinstance(value, dict) else None + + +def read_list(holder: Any, name: str) -> list[Any] | None: + """`holder`'s member `name` when it is a list, else None.""" + value = holder.get(name) if isinstance(holder, dict) else None + return value if isinstance(value, list) else None + + +def read_objects(holder: Any, name: str) -> list[dict[str, Any]]: + """The object items of `holder`'s list member `name`: an absent list, or + one of another type, holds none, and an item of another type reads as + absent.""" + return [item for item in read_list(holder, name) or [] if isinstance(item, dict)] + + +def read_string(holder: Any, name: str) -> str | None: + """`holder`'s member `name` when it is a string, else None.""" + value = holder.get(name) if isinstance(holder, dict) else None + return value if isinstance(value, str) else None + + +# An `assumptions`, `reading_assumptions` or `operations` item reads only when +# it is an object whose required members are strings, and reads as the schema's +# members alone: an optional member of another type, and an unknown member, +# read as absent. A client posts these read forms back, in order. +ASSUMPTION_REQUIRED = ("kind", "binding_ref", "text") +OPERATION_REQUIRED = ("verb", "phrase") + + +def _required_strings(item: Any, names: tuple[str, ...]) -> dict[str, Any] | None: + """`item`'s members `names` when it is an object holding each as a string, + else None.""" + if not isinstance(item, dict) or not all( + isinstance(item.get(name), str) for name in names + ): + return None + return {name: item[name] for name in names} + + +def read_assumption(item: Any) -> dict[str, Any] | None: + """An `Assumption` as a client reads it: kind, binding_ref and text, and + refs as its string items when it is a list. None when the item does not + read.""" + read = _required_strings(item, ASSUMPTION_REQUIRED) + if read is not None and (refs := read_list(item, "refs")) is not None: + read["refs"] = [ref for ref in refs if isinstance(ref, str)] + return read + + +def read_operation(item: Any) -> dict[str, Any] | None: + """An `Operation` as a client reads it: verb and phrase, over when it is a + string or null, and target_year when it is null or a number other than a + boolean with no fractional part, read as that integer, so 2020.0 reads as + 2020. None when the item does not read.""" + read = _required_strings(item, OPERATION_REQUIRED) + if read is None: + return None + over = item.get("over") + if "over" in item and (over is None or isinstance(over, str)): + read["over"] = over + year = item.get("target_year") + if year is None and "target_year" in item: + read["target_year"] = None + elif (isinstance(year, int) and not isinstance(year, bool)) or ( + isinstance(year, float) and year.is_integer() + ): + read["target_year"] = int(year) + return read + + +def read_items( + holder: Any, name: str, read: Callable[[Any], dict[str, Any] | None] +) -> list[dict[str, Any]]: + """The items of `holder`'s list member `name` that `read` reads, in + order, each in its read form.""" + return [ + item for item in map(read, read_list(holder, name) or []) if item is not None + ] + + +# The answer kinds a client reads. Any other kind raises ContractError. +ANSWER_KINDS = ("resolution", "catalogue", "declined") +RESOLUTION = "resolution" +# The variable text an identity resubmit sends for a member no answer part names. +UNNAMED_VARIABLE_TEXT = "dataset" +# The warning severities a fetch reports in its SearchWarning. `info` stays quiet. +SHOWN_SEVERITIES = ("warn", "degraded") + + +@dataclass(frozen=True, slots=True) +class Answer: + """A search answer as a client holds it: the response body, its parts, + sentence and status, which a local choice replaces.""" + + body: dict[str, Any] + parts: list[dict[str, Any]] + sentence: str | None + status: str | None + trace_id: str | None = None + + +def answer_from_body(body: Any) -> Answer: + """The answer a search response holds. A body that is not an object, a + kind no client knows, a resolution with no parts, a part whose `status` + is not a string, and a spec whose `definition.spec_id` differs from its + `spec_id` raise ContractError.""" + if not isinstance(body, dict) or body.get("kind") not in ANSWER_KINDS: + raise ClientError("contract_violation") + parts = body.get("parts", []) + if not isinstance(parts, list) or not all(_readable(part) for part in parts): + raise ClientError("contract_violation") + if body["kind"] == RESOLUTION and not parts: + raise ClientError("contract_violation") + return Answer( + body, parts, read_string(body, "rendered_sentence"), read_string(body, "status") + ) + + +def _readable(part: Any) -> bool: + """Whether a part has a string `status`, and each spec it holds names + its own spec_id in its definition.""" + if not isinstance(part, dict) or not isinstance(part.get("status"), str): + return False + specs = [part.get("spec")] if part["status"] == "definite" else [] + if part["status"] == "candidates": + specs = read_list(read_object(part, "candidates"), "specs") or [] + return all( + not isinstance(spec, dict) + or not isinstance(spec.get("definition"), dict) + or spec["definition"].get("spec_id") == spec.get("spec_id") + for spec in specs + ) + + +# --- choices ---------------------------------------------------------------- + + +@dataclass(frozen=True, slots=True) +class Choice: + """What a choose step settles: the part's index, and the chosen candidate + spec or no_data option.""" + + part: int + candidate: dict[str, Any] | None = None + option: dict[str, Any] | None = None + + +def _refuse() -> ClientError: + return ClientError("choice_invalid") + + +def choice_for( + answer: Answer, kinds: Mapping[str, str], part: int | str | None, option: int | str +) -> Choice: + """The part and option a choose step names, or InvalidRequestError. + + With no part named, exactly one gap must await a choice: a `choice` gap, + or any gap with options. A part is named by its index, its variable text, + or a word that one gap's options mention, and must be a gap. A + candidates part's options are its candidates, chosen by index or by + `candidate_label`. Any other gap's are its no_data options, chosen by + index or label, a label scoped to the options that mention the word the + part was named by. A label must match exactly one option. A boolean part + or option is neither an index nor a label.""" + if isinstance(part, bool) or isinstance(option, bool): + raise _refuse() + gaps = answer_gaps(answer, kinds) + gap_parts = {gap["part"] for gap in gaps} + mention = None + if part is None: + waiting = [g["part"] for g in gaps if g["kind"] == "choice" or g["options"]] + if len(waiting) != 1: + raise _refuse() + index = waiting[0] + elif isinstance(part, int): + index = part + else: + named = [ + i + for i, p in enumerate(answer.parts) + if read_string(p, "variable_text") == part + ] + if not named: + mention = part + named = [ + i + for i in sorted(gap_parts) + if any(part in mentions(o) for o in _options(answer, i)) + ] + if len(named) != 1: + raise _refuse() + index = named[0] + if index not in gap_parts: + raise _refuse() + + chosen = answer.parts[index] + if chosen.get("status") == "candidates": + specs = chosen["candidates"]["specs"] + if isinstance(option, int): + picked = [specs[option]] if 0 <= option < len(specs) else [] + else: + picked = [spec for spec in specs if candidate_label(spec) == option] + if len(picked) != 1: + raise _refuse() + return Choice(index, candidate=picked[0]) + options = _options(answer, index) + if isinstance(option, int): + found = [options[option]] if 0 <= option < len(options) else [] + else: + found = [ + o + for o in options + if read_string(o, "label") == option + and (mention is None or mention in mentions(o)) + ] + if len(found) != 1: + raise _refuse() + return Choice(index, option=found[0]) + + +def candidate_label(spec: Mapping[str, Any]) -> str | None: + """A candidate's label: the `text` of its spec's `resolved.sentence_plan` + tokens in the `heading` segment, a token whose `segment` is not a string + counted in it, joined and stripped of surrounding white space; else its + `resolved.rendered_sentence`; else None.""" + resolved = read_object(spec, "resolved") + heading = "".join( + read_string(token, "text") or "" + for token in read_objects(resolved, "sentence_plan") + if read_string(token, "segment") in (None, "heading") + ).strip() + return heading or read_string(resolved, "rendered_sentence") or None + + +def _options(answer: Answer, index: int) -> list[dict[str, Any]]: + """A part's no_data options, as `read_objects` reads them.""" + return read_objects(read_object(answer.parts[index], "no_data"), "options") + + +def mentions(option: Mapping[str, Any]) -> list[str]: + """The words a no_data option mentions, its string items.""" + return [w for w in read_list(option, "mentions") or [] if isinstance(w, str)] + + +def choice_input(answer: Answer, choice: Choice) -> dict[str, Any]: + """The Search input a choice posts. In a one-part answer an option posts + its data_query. Any other choice posts dataset_resubmit with one entry + per part, in part order, so a picked candidate in a one-part answer posts + its identity as the one entry, and Search answers the picked reading.""" + if len(answer.parts) == 1 and choice.option is not None: + _option_part(choice.option) + return _data_query(choice.option) + entries = [ + resubmit_entry(part, choice if index == choice.part else None) + for index, part in enumerate(answer.parts) + ] + return {"kind": "dataset_resubmit", "entries": entries} + + +def resubmit_entry(part: dict[str, Any], choice: Choice | None) -> dict[str, Any]: + """One part's dataset_resubmit entry. The chosen candidate posts its + identity and the chosen option its one parsed part. Otherwise a definite + part posts its spec's identity, a candidates part its candidate set in the + server's order with its ordering and truncated echoed, and any other part + its restatement as a parsed entry, or a placeholder when it has none. + Each identity, the chosen candidate's, a definite part's and each of a + candidates entry's, echoes its reading's assumptions as `reading_echo` + gives them.""" + if choice is not None and choice.candidate is not None: + candidate = choice.candidate + return _echo( + part, + entry_kind="identity", + **_identity(candidate, reading_echo(part, candidate)), + ) + if choice is not None and choice.option is not None: + return {"entry_kind": "parsed", "part": _option_part(choice.option)} + match part.get("status"): + case "definite": + spec = part["spec"] + return _echo( + part, entry_kind="identity", **_identity(spec, reading_echo(part, spec)) + ) + case "candidates": + candidates = part["candidates"] + return _echo( + part, + entry_kind="candidates", + ordering=read_string(candidates, "ordering"), + truncated=candidates.get("truncated") is True, + candidates=[ + _identity(spec, reading_echo(part, spec)) + for spec in candidates["specs"] + ], + ) + return _restated_entry(part) + + +def _data_query(option: Mapping[str, Any]) -> dict[str, Any]: + """A no_data option's `data_query`; an option without one raises + ContractError, in a one-part answer as in a several-part one.""" + query = option.get("data_query") + if not isinstance(query, dict): + raise ClientError("contract_violation") + return query + + +def _option_part(option: Mapping[str, Any]) -> Any: + """The one part a no_data option's `data_query` holds. A query of other + than one part raises ContractError, in a one-part answer as in a + several-part one.""" + parts = _data_query(option).get("parts") + if not isinstance(parts, list) or len(parts) != 1: + raise ClientError("contract_violation") + return parts[0] + + +def reading_echo(part: Mapping[str, Any], spec: Mapping[str, Any]) -> Any: + """The assumptions a resubmitted reading of `part` echoes: a definite + part's `assumptions`, or a candidates part's `reading_assumptions` under + the reading's spec_id, each in its read form and an item that does not + read left out. + None, when the part carries no such list, posts no `assumptions`, and + Search reads the reading as a fresh request does. `[]` states none.""" + if part.get("status") == "candidates": + holder, name = read_object(part, "reading_assumptions"), spec["spec_id"] + else: + holder, name = part, "assumptions" + if read_list(holder, name) is None: + return None + return read_items(holder, name, read_assumption) + + +def _restated_entry(part: dict[str, Any]) -> dict[str, Any]: + """A part without a reading: its restatement as a parsed entry, else a + placeholder of its no_data reason or unsupported code. A part of unknown + status without a restatement cannot be posted back.""" + if isinstance(part.get("restatement"), dict): + return {"entry_kind": "parsed", "part": part["restatement"]} + match part.get("status"): + case "no_data": + reason = part["no_data"]["reason"] + return _echo( + part, entry_kind="placeholder", status="no_data", reason=reason + ) + case "unsupported": + code = part["unsupported"]["code"] + return _echo( + part, entry_kind="placeholder", status="unsupported", code=code + ) + raise _refuse() + + +def _identity(spec: dict[str, Any], assumptions: Any = None) -> dict[str, Any]: + """A spec's identity, its entity groups when it has any, and the + reading's `assumptions` echo unless it is None.""" + item: dict[str, Any] = {"identity": spec["definition"]["identity"]} + groups = read_object(spec.get("resolved"), "entity_groups") + if groups: + item["entity_groups"] = groups + if assumptions is not None: + item["assumptions"] = assumptions + return item + + +def _echo(part: dict[str, Any], **members: Any) -> dict[str, Any]: + """An entry with the members every entry but a parsed one echoes from its + part: variable_text, separate when true, and operations when any item + reads, in its read form.""" + variable_text = read_string(part, "variable_text") + if not variable_text: + raise _refuse() + entry: dict[str, Any] = {**members, "variable_text": variable_text} + if part.get("separate") is True: + entry["separate"] = True + if operations := read_items(part, "operations", read_operation): + entry["operations"] = operations + return entry + + +def reading_hints(answer: Answer) -> dict[str, str | None]: + """How `answer`'s readings differ from the question, each line a client + shows once, with its code. In part order, each definite part gives each + operation Search did not run, coded by its verb, each departure, and each + warning shown at `warn` or `degraded` severity; the answer's diagnostics + warnings follow. An `info` warning gives nothing.""" + hints: dict[str, str] = {} + + def notices(holder: Any) -> None: + for warning in read_objects(holder, "warnings"): + message = read_string(warning, "message") + if read_string(warning, "severity") in SHOWN_SEVERITIES and message: + hints.setdefault(f"Note: {message}", read_string(warning, "code")) + + for part in answer.parts: + if part.get("status") != "definite": + continue + for operation in read_items(part, "operations", read_operation): + if verb := operation["verb"]: + phrase = json.dumps(operation["phrase"], ensure_ascii=False) + hints.setdefault(f"Not done: {verb} ({phrase})", verb) + for departure in read_objects(part, "departures"): + if text := read_string(departure, "text"): + hints.setdefault(text, read_string(departure, "code")) + notices(part) + notices(read_object(answer.body, "diagnostics")) + return hints + + +def search_warns(answer: Answer) -> bool: + """Whether fetching `answer` issues a SearchWarning: its readings differ + from the question in some way `reading_hints` lists.""" + return bool(reading_hints(answer)) + + +def search_warning_code(answer: Answer) -> str | None: + """The code a SearchWarning on `answer` carries: the one hint's code, or + None when the readings differ in several ways.""" + codes = list(reading_hints(answer).values()) + return codes[0] if len(codes) == 1 else None + + +def answer_gaps(answer: Answer, kinds: Mapping[str, str]) -> list[dict[str, Any]]: + """Each part without a reading. A candidates part is a choice among its + specs, a no_data part takes its reason's gap kind, or `timed_out` when the + answer timed out, an unsupported part is an `unsupported` gap, and a part + of unknown status is an `unknown` gap.""" + diagnostics = read_object(answer.body, "diagnostics") + timed_out = diagnostics is not None and diagnostics.get("timed_out") is True + gaps = [] + for index, part in enumerate(answer.parts): + match part.get("status"): + case "definite": + continue + case "candidates": + kind, options = "choice", len(part["candidates"]["specs"]) + case "no_data": + no_data = part["no_data"] + kind = ( + "timed_out" + if timed_out + else kinds.get(no_data["reason"], "no_data") + ) + options = len(read_objects(no_data, "options")) + case "unsupported": + kind, options = "unsupported", 0 + case _: + kind, options = "unknown", 0 + gaps.append({"part": index, "kind": kind, "options": options}) + return gaps + + +def answer_members(answer: Answer) -> list[tuple[list[str], dict[str, Any]]]: + """One member per distinct spec_id of the definite parts, in part order: + the variable text of every part it answers that names one, and the first + such part's spec.""" + members: dict[str, tuple[list[str], dict[str, Any]]] = {} + for part in answer.parts: + if part.get("status") != "definite": + continue + spec = part["spec"] + named = members.setdefault(spec["spec_id"], ([], spec))[0] + if variable_text := read_string(part, "variable_text"): + named.append(variable_text) + return list(members.values()) + + +def held_spec(spec: Mapping[str, Any]) -> dict[str, Any]: + """A served spec as a client holds it, the shape of a step's `spec`: its + spec_id, definition and sentence, and the entity groups its `resolved` + names, when it names any.""" + resolved = spec["resolved"] + held = { + "spec_id": spec["spec_id"], + "definition": spec["definition"], + "sentence": read_string(resolved, "rendered_sentence"), + } + if groups := read_object(resolved, "entity_groups"): + held["entity_groups"] = groups + return held + + +def answer_outcome(answer: Answer, kinds: Mapping[str, str]) -> dict[str, Any]: + """An answer outcome. A declined or catalogue answer is incomplete.""" + gaps = answer_gaps(answer, kinds) + outcome: dict[str, Any] = {"kind": answer.body["kind"]} + if answer.status is not None: + outcome["status"] = answer.status + outcome["sentence"] = answer.sentence + outcome["complete"] = answer.body["kind"] == "resolution" and not gaps + outcome["specs"] = [spec["spec_id"] for _, spec in answer_members(answer)] + outcome["gaps"] = gaps + return {"answer": outcome} + + +def part_label(member: Mapping[str, Any]) -> str: + """The `part` column's value on a member's rows in a dataset of several + members. It is the member's parts joined by `; `, or its sentence when it + answers no part.""" + return "; ".join(member["parts"]) or member["sentence"] + + +def dataset_summary( + members: Sequence[Mapping[str, Any]], + missing: Sequence[Mapping[str, Any]], + *, + search_warning: bool | None = None, +) -> dict[str, Any]: + """A dataset outcome's members and gaps, and for a fetch of an answer + whether it issued a SearchWarning, without the rows, columns and per-part + row counts the Parquet bodies hold.""" + summary: dict[str, Any] = { + "complete": not missing, + "members": [ + { + "parts": list(member["parts"]), + "spec_id": member["spec_id"], + "content_version": member["content_version"], + "sentence": member["sentence"], + } + for member in members + ], + "missing": [{"part": gap["part"], "kind": gap["kind"]} for gap in missing], + } + if search_warning is not None: + summary["search_warning"] = search_warning + return summary + + +def _strict_members(strict: dict[str, Any]) -> dict[str, list[str]]: + """The required strict members of each component schema.""" + members: dict[str, list[str]] = {} + for entry in strict["required"]: + match = _STRICT_POINTER.match(entry["pointer"]) + if match is not None: + members.setdefault(match.group(1), []).append(match.group(2)) + return members + + +def json_type(value: Any) -> str: + """The JSON type of a parsed value, a number with no fractional part as + `integer`, as JSON Schema reads it, so `1.0` is an integer, as it is to a + client whose JSON parser keeps no separate integer type.""" + if isinstance(value, bool): + return "boolean" + if isinstance(value, int) or (isinstance(value, float) and value.is_integer()): + return "integer" + for kind, name in ((dict, "object"), (list, "array"), (str, "string")): + if isinstance(value, kind): + return name + return "number" if isinstance(value, float) else "null" + + +def schema_types(openapi: dict[str, Any], schema: Any) -> set[str] | None: + """The JSON types `schema` admits, through `$ref`, `anyOf`, `oneOf` and + `allOf`, with `number` admitting an integer. None when it names none.""" + if not isinstance(schema, dict): + return None + ref = schema.get("$ref") + if isinstance(ref, str) and ref.startswith("#/"): + return schema_types(openapi, _resolve(openapi, ref[1:])) + if "type" in schema: + named = schema["type"] + types = set(named) if isinstance(named, list) else {named} + return types | {"integer"} if "number" in types else types + for keyword in ("anyOf", "oneOf"): + if keyword in schema: + branches = [schema_types(openapi, b) for b in schema[keyword]] + if any(b is None for b in branches): + return None + return set().union(*(b for b in branches if b is not None)) + for branch in schema.get("allOf", []): + if (types := schema_types(openapi, branch)) is not None: + return types + return {"object"} if "properties" in schema else None + + +def strict_gaps( + openapi: dict[str, Any], + members: Mapping[str, Sequence[str]], + schema: Any, + body: Any, + where: str = "", + component: str | None = None, +) -> list[str]: + """The strict members `body` lacks, holds as null, or holds as a JSON + type their schema does not admit, and each item of a strict list of a + type its item schema does not admit, read through `schema`. Each component + schema it reaches names its own, and a + discriminated union whose discriminator `body` lacks is a gap. The walk + goes down only through strict members, the ones a client reads, so a + member no client reads, such as a spec's `resolved.equivalent_readings`, + goes unchecked. A discriminator value the union does not map, and a + union without a discriminator that offers more than one object branch, + reach nothing. `component` is the component schema `schema` belongs to.""" + if not isinstance(schema, dict): + return [] + ref = schema.get("$ref") + if isinstance(ref, str) and ref.startswith("#/"): + name = ref.rsplit("/", 1)[-1] + gaps = [] + if isinstance(body, dict): + gaps = [ + f"{where}/{member}" + for member in members.get(name, ()) + if body.get(member) is None + ] + return gaps + strict_gaps( + openapi, members, _resolve(openapi, ref[1:]), body, where, name + ) + discriminator = schema.get("discriminator") + if isinstance(discriminator, dict) and isinstance(body, dict): + name = discriminator["propertyName"] + if body.get(name) is None: + return [f"{where}/{name}"] + target = discriminator.get("mapping", {}).get(body[name]) + if target is None: + return [] + return strict_gaps(openapi, members, {"$ref": target}, body, where) + gaps = [] + for keyword in ("anyOf", "oneOf"): + branches = [b for b in schema.get(keyword, []) if b.get("type") != "null"] + if len(branches) == 1: + gaps.extend( + strict_gaps(openapi, members, branches[0], body, where, component) + ) + for branch in schema.get("allOf", []): + gaps.extend(strict_gaps(openapi, members, branch, body, where, component)) + if isinstance(body, dict): + read = members.get(component, ()) if component is not None else () + for name, member in schema.get("properties", {}).items(): + if name not in body or name not in read or body[name] is None: + continue + types = schema_types(openapi, member) + if types is not None and json_type(body[name]) not in types: + gaps.append(f"{where}/{name}") + continue + gaps.extend( + strict_gaps(openapi, members, member, body[name], f"{where}/{name}") + ) + if isinstance(body, list) and "items" in schema: + types = schema_types(openapi, schema["items"]) + for index, item in enumerate(body): + if types is not None and json_type(item) not in types: + gaps.append(f"{where}/{index}") + continue + gaps.extend( + strict_gaps(openapi, members, schema["items"], item, f"{where}/{index}") + ) + return gaps + + +class _UnfitError(Exception): + """The exchanges do not fit the steps, so no outcome follows from them.""" + + +_SEARCH = ("POST", "/search/resolve") +_BUILD = ("POST", "/datasets") +# The path a client polls an operation at, under the base URL. +POLL_PATH = "/datasets/operations/{operation_id}" +_MANIFEST = {"$ref": "#/components/schemas/Manifest"} +_OPERATION = {"$ref": "#/components/schemas/OperationResource"} +# The bare Parquet rendering a fetch asks for, by layout. +LAYOUT_RENDERINGS = { + "long": {"format": "parquet", "bundle": False}, + "frame": {"format": "parquet", "bundle": False, "layout": "frame"}, +} +# The snapshot refusal after which a stored version's lookup builds it again. +# The version exists, but its file has expired. Any other refusal ends it. +FILE_EXPIRED = "artifact_expired" +# The file route refusals after which the lookup takes its next step. +FILE_GONE = frozenset({FILE_EXPIRED, "artifact_not_found", "not_found"}) +# The classes of a rebuild refusal after which the lookup reads the newest +# version, and of a versions refusal that leaves the newest version unknown. +REBUILD_REFUSED = frozenset( + {"InvalidRequestError", "NotFoundError", VERSION_UNAVAILABLE} +) +NO_VERSIONS = frozenset({"NotFoundError"}) +OPERATION_FAILED = "operation_failed" + + +def rendering_for(layout: str | None) -> dict[str, Any]: + """The build request's `options` for a fetch's `layout`, long by default.""" + return dict(LAYOUT_RENDERINGS[layout or "long"]) + + +def posted_scope(step: Mapping[str, Any]) -> dict[str, Any] | None: + """The `input.scope` a fetch of a spec posts for the step's + narrowing, or None when it narrows nothing. The server's + `scope.entities` replaces the spec's whole entity binding, so the + client posts the spec's bound roles with each role the step names + replaced, and a role named with null dropped. A step that names no + role, or no facet, posts no `entities` or `facets`, so `{}` narrows + nothing.""" + scope: dict[str, Any] = {} + window = step.get("window") + if isinstance(window, list): + start, end = window + scope["window"] = {"kind": "range", "start_year": start, "end_year": end} + elif window is not None: + scope["window"] = {"kind": window} + if named := step.get("entities"): + bound = dict(step["spec"]["definition"]["identity"].get("entities", {})) + for role, refs in named.items(): + if refs is None: + bound.pop(role, None) + else: + bound[role] = list(refs) + scope["entities"] = bound + if facets := step.get("facets"): + scope["facets"] = {name: {"ref": ref} for name, ref in facets.items()} + return scope or None + + +def versions_path(spec_id: str) -> str: + """The versions route asked for the newest stored version alone. The + route lists versions newest first, so `limit=1` returns just it.""" + return f"/datasets/{spec_id}/versions?limit=1" + + +def search_body(input_: Mapping[str, Any]) -> dict[str, Any]: + """The whole body a client posts to Search for `input_`.""" + return {"schema_version": 1, "input": input_} + + +def newest_listed(body: Any) -> str | None: + """The newest version a versions page lists, its first, or None when it + lists none. A body whose `versions` is not a list of versions, each with + a `content_version`, raises ContractError.""" + versions = body.get("versions") if isinstance(body, dict) else None + if not isinstance(versions, list) or not all( + isinstance(v, dict) and isinstance(v.get("content_version"), str) + for v in versions + ): + raise ClientError("contract_violation") + return versions[0]["content_version"] if versions else None + + +def stored_version[T]( + member: Mapping[str, Any], + client_codes: Mapping[str, Any], + *, + snapshot: Callable[[], Any], + stored_file: Callable[[Any], tuple[T | None, ClientError | None]], + rebuild: Callable[[], Any], + rebuilt: Callable[[Any], T], + newest: Callable[[], str | None], +) -> T: + """One version a ref names, through the lookup order: the snapshot + route and the files route at the stored digest, then the file + selector, then a build that must answer the same version. A snapshot + or build that answers another spec_id raises ContractError, as a + snapshot of another version does. A snapshot refusal other than + artifact_expired ends the lookup. Otherwise a lookup that finds no file + raises VersionUnavailableError with the first refusal's code, or + version_unavailable, and the newest version, either the one the build + answered or the versions route's first. + + The callers make the requests: `snapshot` asks the snapshot route, + `stored_file` gives what the files route or the selector served for a + snapshot manifest, or None and the refusal it met, `rebuild` builds the + member's spec, `rebuilt` gives what a build of the stored version + serves, and `newest` asks the versions route.""" + spec_id, version = member["spec"]["spec_id"], member["content_version"] + refusal: ClientError | None = None + manifest = None + try: + manifest = snapshot() + except ClientError as error: + if error.code != FILE_EXPIRED: + raise + refusal = error + if manifest is not None: + built = (manifest["definition"]["spec_id"], manifest["content_version"]) + if built != (spec_id, version): + raise ClientError("contract_violation") + found, refusal = stored_file(manifest) + if found is not None: + return found + try: + manifest = rebuild() + except ClientError as error: + if error.error_class(client_codes) not in REBUILD_REFUSED: + raise + refusal = refusal if refusal is not None else error + newest_version = newest() + else: + if manifest["definition"]["spec_id"] != spec_id: + raise ClientError("contract_violation") + if manifest["content_version"] == version: + return rebuilt(manifest) + newest_version = manifest["content_version"] + raise ClientError( + refusal.code if refusal is not None else "version_unavailable", + error=VERSION_UNAVAILABLE, + newest_version=newest_version, + trace_id=refusal.trace_id if refusal is not None else None, + ) + + +def build_body( + spec: Mapping[str, Any], + scope: Mapping[str, Any] | None, + rendering: Mapping[str, Any], +) -> dict[str, Any]: + """The body a client posts to build `spec`, a step's `spec` or a ref's. + It holds the spec_id and unmodified definition, `scope` when it narrows + anything, and `rendering` as the options.""" + input_: dict[str, Any] = { + "kind": "spec_id", + "spec_id": spec["spec_id"], + "definition": spec["definition"], + } + if scope: + input_["scope"] = dict(scope) + return {"schema_version": 1, "input": input_, "options": dict(rendering)} + + +def pick_artifact( + manifest: Mapping[str, Any], rendering: Mapping[str, Any] +) -> dict[str, Any] | None: + """The artifact a manifest lists for `rendering`, matched on format, + bundle and whether its layout is the frame.""" + frame = rendering.get("layout") == "frame" + for artifact in manifest["artifacts"]: + found = artifact.get("rendering") + if ( + isinstance(found, dict) + and found.get("format") == rendering["format"] + and found.get("bundle") is rendering["bundle"] + and (found.get("layout") == "frame") == frame + ): + return artifact + return None + + +def digest_of(data: bytes) -> str: + """The `sha256:` digest the server names a stored file by.""" + return "sha256:" + hashlib.sha256(data).hexdigest() + + +def selector_path( + spec_id: str, content_version: str, rendering: Mapping[str, Any] +) -> str: + """The file selector's path for a stored version, its rendering as the + query.""" + query = "&".join( + f"{name}={str(value).lower() if isinstance(value, bool) else value}" + for name, value in rendering.items() + ) + return f"/datasets/{spec_id}/{content_version}/file?{query}" + + +# The storage host a signed download names, the only host outside the API a +# client fetches from, and the query every signed URL in a record carries. +STORAGE_ORIGIN = "https://storage.googleapis.com" +REDACTED_QUERY = "X-Goog-Signature=redacted" +# A files route answers FILES_ROUTE_REDIRECT with the `location` the client +# fetches, or FILES_ROUTE_FILE with the file as its body. A refusal reads by +# the refusal rules, and any other status, another 2xx or 3xx included, +# raises ContractError `unexpected_response`. A signed fetch that answers +# other than SIGNED_FETCH_STATUS is a failed fetch. +FILES_ROUTE_REDIRECT = 302 +FILES_ROUTE_FILE = 200 +SIGNED_FETCH_STATUS = 200 + + +def download_target(base_url: str, route_url: str, location: str) -> tuple[str, str]: + """Where a client fetches the file a files route's `location` names, + as `(kind, target)`: a URL on the storage host as `url`, fetched bare; + or a URL on the API's origin, a relative one resolved against + `route_url`, as the `origin_path` it reaches. A URL on any other origin + raises ContractError.""" + resolved = urlsplit(urljoin(route_url, location)) + origin = f"{resolved.scheme}://{resolved.netloc}" + if origin == STORAGE_ORIGIN: + return "url", location + base = urlsplit(base_url) + if origin != f"{base.scheme}://{base.netloc}": + raise ClientError("contract_violation") + return "origin_path", urlunsplit(("", "", resolved.path, resolved.query, "")) + + +def artifact_route(base_url: str, url: str) -> str: + """The `origin_path` of the files route a manifest artifact's `url` + names: a root-relative url as it resolves on the API's origin, and an + absolute url on that origin as its path and query. A url on any other + origin, the storage host's included, raises ContractError.""" + base = urlsplit(base_url) + origin = f"{base.scheme}://{base.netloc}" + resolved = urlsplit(urljoin(f"{origin}/", url)) + if f"{resolved.scheme}://{resolved.netloc}" != origin: + raise ClientError("contract_violation") + return urlunsplit(("", "", resolved.path, resolved.query, "")) + + +def data_warning(manifest: Mapping[str, Any]) -> ClientError | None: + """The DataWarning a strict fetch raises for a manifest: its first warning + above `info` severity, with that warning's code. None when it has none.""" + for warning in read_objects(manifest, "warnings"): + if read_string(warning, "severity") != "info": + return ClientError(read_string(warning, "code"), error="DataWarning") + return None + + +def resubmitted_sentence(answer: Answer, spec_id: str) -> str: + """The sentence Search gives a built identity it was posted. The answer + must be one definite part of `spec_id`, with a sentence, or the client + raises ContractError.""" + found = answer.parts[0] if len(answer.parts) == 1 else {} + spec = found.get("spec") if found.get("status") == "definite" else None + if answer.body.get("kind") != "resolution" or not isinstance(spec, dict): + raise ClientError("contract_violation") + resolved = spec.get("resolved") + sentence = resolved.get("rendered_sentence") if isinstance(resolved, dict) else None + if spec.get("spec_id") != spec_id or not isinstance(sentence, str) or not sentence: + raise ClientError("contract_violation") + return sentence + + +def kept_entity_groups( + held: Mapping[str, Any] | None, built: Mapping[str, Any] +) -> dict[str, Any]: + """The held spec's entity groups a built definition keeps, which are the + group of each role the built identity binds to the same entities the held + definition binds it to. A role the narrowing rebound or dropped loses its + group, and a window or facets narrowing keeps every group.""" + if held is None or not (groups := read_object(held, "entity_groups")): + return {} + before = read_object(read_object(held["definition"], "identity"), "entities") + after = read_object(built["identity"], "entities") + return { + role: group + for role, group in groups.items() + if read_list(after, role) is not None + and bound_refs(after, role) == bound_refs(before, role) + } + + +def bound_refs(entities: dict[str, Any] | None, role: str) -> set[str]: + """The refs an identity's `entities` binds `role` to, its string items. + A binding of another type, or an item of one, reads as absent.""" + return {ref for ref in read_list(entities, role) or [] if isinstance(ref, str)} + + +def sentence_entry( + parts: list[str], built: Mapping[str, Any], held: Mapping[str, Any] | None +) -> dict[str, Any]: + """The dataset_resubmit identity entry that asks Search for a built + definition's sentence: the built identity, the member's first part or + UNNAMED_VARIABLE_TEXT, and the entity groups `kept_entity_groups` gives, + left out when it gives none. `held` is the spec the client built from, + None for a resumed operation.""" + entry: dict[str, Any] = { + "entry_kind": "identity", + "variable_text": parts[0] if parts else UNNAMED_VARIABLE_TEXT, + "identity": built["identity"], + } + if groups := kept_entity_groups(held, built): + entry["entity_groups"] = groups + return entry + + +def failed_operation( + resource: Mapping[str, Any], + actions: Mapping[str, Mapping[str, Any]], + headers: Mapping[str, str] | None = None, +) -> tuple[ClientError, bool]: + """A failed operation's error, the refusal its problem document states at + that document's status or else 500, and whether it is retryable. A + failed operation with no document raises `operation_failed`. Its trace id + is the document's, else the `headers` of the response that carried the + resource.""" + problem = resource.get("error") + if not isinstance(problem, dict): + error = ClientError( + OPERATION_FAILED, + error=error_class(500, OPERATION_FAILED, actions), + trace_id=trace_id(None, headers), + ) + return error, retryable(500, None) + status = problem.get("status") + status = status if isinstance(status, int) else 500 + error = refusal_error(status, problem, actions, headers) + return error, retryable(status, problem) + + +class LongBuild: + """A build the server runs on, followed the way a client polls it. Each + wait before a poll is `PollPacing`'s. A retryable 429 poll spends no + retry, any other retryable refused poll one of MAX_RETRIES, and a refused + poll that is not retryable raises, a 429 included. The poll after a + refusal waits as `PollPacing` gives. A poll answering a failed + operation, retryable by its error, posts the build again once when the + client holds its request. Otherwise, and for an operation that failed + before the client polled it, the operation's error raises. `entry` is + the build's `long_builds` entry, and `result` its manifest once it is + done.""" + + def __init__( + self, + resource: Mapping[str, Any], + headers: Mapping[str, str], + request: Any, + actions: Mapping[str, Mapping[str, Any]], + ) -> None: + self.request = request + self.actions = actions + self.pacing = PollPacing() + self.retries = 0 + self.result: dict[str, Any] | None = None + self.entry: dict[str, Any] = { + "operation_id": resource["operation"]["operation_id"], + "poll_waits": [], + "resubmissions": 0, + } + self._take(resource, headers) + + def _take(self, resource: Mapping[str, Any], headers: Mapping[str, str]) -> None: + self.resource = resource + self.headers = headers + self.pacing.took(resource["operation"], headers) + if resource["operation"]["status"] == "done": + manifest = resource.get("manifest") + if not isinstance(manifest, dict): + raise ClientError("contract_violation") + self.result = manifest + + def next_wait(self) -> float: + """The wait before the next poll, kept in `entry`.""" + if self.resource["operation"]["status"] == "failed": + raise failed_operation(self.resource, self.actions, self.headers)[0] + wait = self.pacing.next_wait() + self.entry["poll_waits"].append(wait) + return wait + + def polled(self, status: int, headers: Mapping[str, str], body: Any) -> bool: + """Takes a poll's response, and says whether to post the build again. + + Raises: + ClientError: The error that ends the build. + """ + if status < 400: + self.retries = 0 + self._take(body, headers) + if body["operation"]["status"] != "failed": + return False + error, again = failed_operation(body, self.actions, headers) + else: + error = refusal_error(status, body, self.actions, headers) + again = retryable(status, body) + if error.code != OPERATION_FAILED: + if not again: + raise error + if status != 429: + if self.retries >= MAX_RETRIES: + raise error + self.retries += 1 + self.pacing.refused_poll(headers) + return False + if not again or self.request is None or self.entry["resubmissions"]: + raise error + self.entry["resubmissions"] += 1 + return True + + def reposted(self, status: int, headers: Mapping[str, str], body: Any) -> None: + """Takes the answer to the build posted again: a refusal raises, a + 202 starts the operation the client polls next, and a 200 is done.""" + if status >= 400: + raise refusal_error(status, body, self.actions, headers) + if status != 202: + self.result = body + return + self.entry["operation_id"] = body["operation"]["operation_id"] + self._take(body, headers) + + +@dataclass +class _Minted: + """An operation a mint started or a resume read, for the result step: + its resource, the headers that came with it, the build request a failed + operation resubmits (None for a resumed one), the spec the client holds, + and the rendering it downloads.""" + + resource: dict[str, Any] + headers: dict[str, str] + request: dict[str, Any] | None + spec: dict[str, Any] | None + rendering: dict[str, Any] + + +@dataclass +class _Replay: + """A record's steps run over its exchanges the way a client makes them, + each giving the outcome it reaches.""" + + exchanges: list[dict[str, Any]] + routes: _Routes + base_url: str + members: Mapping[str, Sequence[str]] + actions: Mapping[str, Mapping[str, Any]] + client_codes: Mapping[str, Mapping[str, Any]] + body_dir: Path + cursor: int = 0 + answer: Answer | None = None + minted: _Minted | None = None + long_builds: list[dict[str, Any]] = field(default_factory=list) + retry_waits: list[float] = field(default_factory=list) + warnings: list[str] = field(default_factory=list) + warned: set[tuple[str, ...]] = field(default_factory=set) + read_trace: str | None = None + + @property + def kinds(self) -> dict[str, str]: + return gap_kinds(self.actions) + + @property + def base_path(self) -> str: + return urlsplit(self.base_url).path.rstrip("/") + + # -- exchanges -- + + def call( + self, method: str, target: str, *, kind: str = "path", retries: bool = True + ) -> dict[str, Any]: + """The exchange a client acts on for its next request, whose `kind`, + `path`, `origin_path` or `url`, is exactly `target`. With `retries`, + a refusal followed by the same request is retried as `may_retry` + allows, each retry after the wait `retry_wait` gives, and the last + exchange of the run is the one acted on. A run that ends while + `may_retry` holds lacks a retry the client makes. Each API + response issues the warnings its headers carry.""" + if self.cursor >= len(self.exchanges): + raise _UnfitError(f"the steps make a {method} {target} the record lacks") + exchange = self.exchanges[self.cursor] + request = exchange["request"] + if request["method"] != method or request.get(kind) != target: + actual = request.get("path") or request.get("origin_path") or request["url"] + raise _UnfitError( + f"exchange {self.cursor} is {request['method']} {actual}, where the " + f"steps make a {method} {target}" + ) + self.cursor += 1 + self.took(exchange) + answers = [exchange["response"]] + while ( + retries + and self.cursor < len(self.exchanges) + and self.exchanges[self.cursor]["request"] == request + and may_retry(request, answers) + ): + headers = exchange["response"].get("headers", {}) + self.retry_waits.append(retry_wait(headers, len(answers) - 1)) + exchange = self.exchanges[self.cursor] + self.cursor += 1 + self.took(exchange) + answers.append(exchange["response"]) + if retries and may_retry(request, answers): + raise _UnfitError( + f"exchange {self.cursor - 1} is a retryable refusal with retries " + f"left, and the record holds no retry of {method} {target}" + ) + return exchange + + def took(self, exchange: dict[str, Any]) -> None: + """Notes the warnings an API response's headers issue, and its trace + id as the one an error raised on reading it carries.""" + if "url" not in exchange["request"]: + response = exchange["response"] + headers = response.get("headers", {}) + self.warnings.extend(header_warnings(headers, self.warned)) + self.read_trace = trace_id(response.get("json"), headers) + + def acted_on(self, exchange: dict[str, Any], schema: Any = None) -> Any: + """The JSON body a client acts on, read through `schema` or else its + route's schema for its status. A refusal raises its error, a success + of a JSON route without a JSON body raises ContractError + `unexpected_response`, and a body without a strict member raises + ContractError.""" + response = exchange["response"] + body = response.get("json") + if response["status"] >= 400: + raise refusal_error( + response["status"], + problem_body(response), + self.actions, + response.get("headers"), + ) + if schema is None: + schema = self.routes.response_schema( + self.base_path, exchange["request"], response["status"] + ) + if schema is not None and "json" not in response: + raise ClientError("unexpected_response") + self.strict(schema, body) + return body + + def answered(self, response: Mapping[str, Any], schema: Any) -> Any: + """The body of a response the long-build rules read: a refusal's + problem body, or a success's JSON body read through `schema`, which a + success without one lacks, raising ContractError + `unexpected_response`.""" + if response["status"] >= 400: + return problem_body(response) + if "json" not in response: + raise ClientError("unexpected_response") + self.strict(schema, response["json"]) + return response["json"] + + def strict(self, schema: Any, body: Any) -> None: + if strict_gaps(self.routes.openapi, self.members, schema, body): + raise ClientError("contract_violation") + + def body(self, response: dict[str, Any]) -> bytes: + if "body_file" in response: + path = body_path(self.body_dir, response["body_file"]) + if not path.is_file(): + raise _UnfitError(f"body file {response['body_file']!r} is missing") + return path.read_bytes() + if "json" in response: + return json.dumps(response["json"]).encode() + return b"" + + def download(self, target: str, digest: str, *, origin: bool) -> None: + """A file through its files route, named by an `origin_path`, as + `artifact_route` places an artifact's `url`, when `origin`, else by a + path under the base URL. A 302 names the signed URL in its + `location`, which the client fetches once where `download_target` + places it. A 200 holds the file, a refusal raises, and any other + status raises ContractError `unexpected_response`. A fetch that + answers other than 200, or bytes that do not hash to `digest`, asks + the route once more, and a second failure raises.""" + failure = ClientError("download_failed") + base = urlsplit(self.base_url) + route_url = ( + f"{base.scheme}://{base.netloc}{target}" + if origin + else f"{self.base_url.rstrip('/')}{target}" + ) + for _ in range(2): + kind = "origin_path" if origin else "path" + files = self.call("GET", target, kind=kind)["response"] + status = files["status"] + if status >= 400: + raise refusal_error( + status, problem_body(files), self.actions, files.get("headers") + ) + if status == FILES_ROUTE_FILE: + file = files + elif status == FILES_ROUTE_REDIRECT: + location = files.get("headers", {}).get("location") + if not isinstance(location, str): + raise _UnfitError(f"the redirect from {target} names no location") + fetched, at = download_target(self.base_url, route_url, location) + file = self.call("GET", at, kind=fetched, retries=False)["response"] + if file["status"] != SIGNED_FETCH_STATUS: + failure = ClientError("download_failed") + continue + else: + raise ClientError("unexpected_response") + if digest_of(self.body(file)) == digest: + return + failure = ClientError("digest_mismatch") + raise failure + + def resolve(self, posts: dict[str, Any]) -> Answer: + """A Search request whose recorded body is the one `search_body` gives + for the input `posts`.""" + exchange = self.posted(_SEARCH, search_body(posts)) + answer = answer_from_body(self.acted_on(exchange)) + return replace(answer, trace_id=self.read_trace) + + def posted(self, route: tuple[str, str], posts: dict[str, Any]) -> dict[str, Any]: + """A request to `route` whose recorded body is `posts`, whole.""" + exchange = self.call(*route) + sent = exchange["request"].get("json") + if sent != posts: + raise _UnfitError( + f"exchange {self.cursor - 1} posts {json.dumps(sent)[:300]}, " + f"where the rules post {json.dumps(posts)[:300]}" + ) + return exchange + + # -- builds -- + + def posted_build( + self, + spec: Mapping[str, Any], + rendering: dict[str, Any], + scope: dict[str, Any] | None, + ) -> dict[str, Any]: + """A build request whose recorded body is the one `build_body` gives + for `spec`, `scope` and `rendering`.""" + return self.posted(_BUILD, build_body(spec, scope, rendering)) + + def build( + self, + spec: Mapping[str, Any], + rendering: dict[str, Any], + scope: dict[str, Any] | None = None, + ) -> dict[str, Any]: + """A build of `spec`'s latest version, posting `rendering` as its + options and `scope` as its input's scope. It returns the manifest the + build answers, through a long build when it answers 202.""" + exchange = self.posted_build(spec, rendering, scope) + if exchange["response"]["status"] != 202: + return self.acted_on(exchange) + resource = self.acted_on(exchange, _OPERATION) + headers = exchange["response"].get("headers", {}) + return self.long_build(resource, headers, exchange["request"]) + + def long_build( + self, + resource: dict[str, Any], + headers: Mapping[str, str], + request: dict[str, Any] | None, + ) -> dict[str, Any]: + """Polls an operation as `LongBuild` rules until it is done and + returns its manifest. A build posted again posts the same request.""" + build = LongBuild(resource, headers, request, self.actions) + self.long_builds.append(build.entry) + while build.result is None: + build.next_wait() + path = POLL_PATH.format(operation_id=build.entry["operation_id"]) + response = self.call("GET", path, retries=False)["response"] + body = self.answered(response, _OPERATION) + if not build.polled(response["status"], response.get("headers", {}), body): + continue + again = self.call(*_BUILD) + if again["request"] != request: + raise _UnfitError("the build posted again posts another request") + reply = again["response"] + schema = _OPERATION if reply["status"] == 202 else _MANIFEST + body = self.answered(reply, schema) + build.reposted(reply["status"], reply.get("headers", {}), body) + self.strict(_MANIFEST, build.result) + return build.result + + def note_warnings(self, manifest: dict[str, Any], strict: bool) -> None: + if strict and (warning := data_warning(manifest)) is not None: + raise warning + + def fetched( + self, + parts: list[str], + spec: dict[str, Any], + rendering: dict[str, Any], + strict: bool, + ) -> dict[str, Any]: + """One member: the build, then the member's files.""" + return self.member(parts, spec, self.build(spec, rendering), rendering, strict) + + def member( + self, + parts: list[str], + spec: dict[str, Any] | None, + manifest: dict[str, Any], + rendering: dict[str, Any], + strict: bool, + ) -> dict[str, Any]: + """A built member: its warnings under strict, its sentence from + Search when the build changed the spec_id or the client lacks it, + then the download. `spec` is None for a resumed operation.""" + self.note_warnings(manifest, strict) + artifact = pick_artifact(manifest, rendering) + if artifact is None: + raise ClientError("contract_violation") + route = artifact_route(self.base_url, artifact["url"]) + built = manifest["definition"]["spec_id"] + sentence = None if spec is None else spec.get("sentence") + if spec is None or built != spec["spec_id"] or sentence is None: + sentence = self.sentence(parts, manifest["definition"], spec) + self.download(route, artifact["artifact_digest"], origin=True) + return { + "parts": parts, + "spec_id": built, + "content_version": manifest["content_version"], + "sentence": sentence, + } + + def sentence( + self, + parts: list[str], + definition: dict[str, Any], + held: dict[str, Any] | None, + ) -> str: + """Search's sentence for a built identity, posted with the entity + groups of `held` that the build keeps. An answer that is not one + definite part of the built spec_id, with a sentence, raises + ContractError.""" + entry = sentence_entry(parts, definition, held) + answer = self.resolve({"kind": "dataset_resubmit", "entries": [entry]}) + return resubmitted_sentence(answer, definition["spec_id"]) + + # -- stored versions -- + + def stored_version(self, member: dict[str, Any]) -> dict[str, Any]: + """One version a ref names, through the lookup order + `stored_version` states.""" + spec = member["spec"] + spec_id, version = spec["spec_id"], member["content_version"] + rendering = member["artifact"]["rendering"] + stored = { + "parts": member["parts"], + "spec_id": spec_id, + "content_version": version, + "sentence": member["sentence"], + } + + def stored_file( + manifest: dict[str, Any], + ) -> tuple[dict[str, Any] | None, ClientError | None]: + served, refusal = self.stored_file(member, manifest) + return (stored if served else None), refusal + + def rebuilt(manifest: dict[str, Any]) -> dict[str, Any]: + held = {**spec, "sentence": member["sentence"]} + return self.member(member["parts"], held, manifest, rendering, False) + + return stored_version( + member, + self.client_codes, + snapshot=lambda: self.acted_on( + self.call("GET", f"/datasets/{spec_id}/{version}") + ), + stored_file=stored_file, + rebuild=lambda: self.build(spec, rendering), + rebuilt=rebuilt, + newest=lambda: self.newest(spec_id), + ) + + def stored_file( + self, member: dict[str, Any], manifest: dict[str, Any] + ) -> tuple[bool, ClientError | None]: + """Whether the files route at the stored digest, or else the file + selector, served the stored file, and the files route's refusal when + it refused. A selector refusal outside FILE_GONE, and a files route + one, raise. A selector file of another digest is not the stored one.""" + digest = member["artifact"]["digest"] + refusal = None + artifact = next( + (a for a in manifest["artifacts"] if a["artifact_digest"] == digest), None + ) + if artifact is not None: + try: + route = artifact_route(self.base_url, artifact["url"]) + self.download(route, digest, origin=True) + except ClientError as error: + if error.code not in FILE_GONE: + raise + refusal = error + else: + return True, None + path = selector_path( + member["spec"]["spec_id"], + member["content_version"], + member["artifact"]["rendering"], + ) + try: + self.download(path, digest, origin=False) + except ClientError as error: + if error.code == "digest_mismatch": + return False, refusal + if error.code in FILE_GONE: + return False, refusal or error + raise + return True, None + + def newest(self, spec_id: str) -> str | None: + """The newest stored version, the one the versions route lists first, + or None when it lists none or refuses the spec as unknown. A page + that lists no versions in the form `newest_listed` reads raises.""" + try: + body = self.acted_on(self.call("GET", versions_path(spec_id))) + except ClientError as error: + if error.error_class(self.client_codes) in NO_VERSIONS: + return None + raise + return newest_listed(body) + + # -- steps -- + + def step(self, step: dict[str, Any]) -> dict[str, Any]: + """The outcome `step` reaches. Whatever the outcome, a step that made + a long build names each in `long_builds`, a step that retried a + refused request gives the waits before its retries in + `retry_waits`, and a step whose responses issued warnings gives their + codes in `warnings`.""" + self.long_builds, self.retry_waits, self.warnings = [], [], [] + self.read_trace = None + op = step["op"] + if op == "fetch": + op = ( + "fetch_ref" if "ref" in step else "fetch_spec" if "spec" in step else op + ) + try: + outcome = getattr(self, f"_{op}")(step) + except ClientError as ended: + if op in {"search", "choose"}: + self.answer = None + outcome = read_from(ended, self.read_trace).outcome(self.client_codes) + return with_step_notes( + outcome, + long_builds=self.long_builds, + retry_waits=self.retry_waits, + warnings=self.warnings, + ) + + def _answered(self) -> Answer: + if self.answer is None: + raise _UnfitError("the step follows no answer") + return self.answer + + def _search(self, step: dict[str, Any]) -> dict[str, Any]: + self.answer = self.resolve({"kind": "raw_text", "query": step["question"]}) + return answer_outcome(self.answer, self.kinds) + + def _choose(self, step: dict[str, Any]) -> dict[str, Any]: + answer = self._answered() + try: + choice = choice_for(answer, self.kinds, step.get("part"), step["option"]) + posts = choice_input(answer, choice) + except ClientError as error: + raise read_from(error, answer.trace_id) from None + chosen = self.resolve(posts) + self.answer = chosen + return answer_outcome(chosen, self.kinds) + + def _fetch(self, step: dict[str, Any]) -> dict[str, Any]: + """A fetch of the answer. Before any request, a declined or catalogue + answer raises DeclinedError, a gap raises IncompleteAnswerError unless + the fetch is partial and some part has a reading, a strict fetch whose + readings depart from the question raises SearchWarning, and the frame + layout with several members raises InvalidRequestError.""" + answer = self._answered() + if answer.body.get("kind") != "resolution": + raise read_from(ClientError("answer_declined"), answer.trace_id) + gaps = answer_gaps(answer, self.kinds) + readings = answer_members(answer) + if gaps and (not step.get("partial", False) or not readings): + raise read_from(ClientError("answer_incomplete"), answer.trace_id) + warns = search_warns(answer) + strict = step.get("strict", False) + if warns and strict: + raise read_from( + ClientError(search_warning_code(answer), error="SearchWarning"), + answer.trace_id, + ) + rendering = rendering_for(step.get("layout")) + if "layout" in rendering and len(readings) > 1: + raise ClientError("invalid_argument") + members = [ + self.fetched( + parts, + held_spec(spec), + rendering, + strict, + ) + for parts, spec in readings + ] + return {"dataset": dataset_summary(members, gaps, search_warning=warns)} + + def _fetch_spec(self, step: dict[str, Any]) -> dict[str, Any]: + rendering = rendering_for(step.get("layout")) + manifest = self.build(step["spec"], rendering, posted_scope(step)) + strict = step.get("strict", False) + member = self.member([], step["spec"], manifest, rendering, strict) + return {"dataset": dataset_summary([member], [])} + + def _fetch_ref(self, step: dict[str, Any]) -> dict[str, Any]: + members = [self.stored_version(member) for member in step["ref"]["members"]] + return {"dataset": dataset_summary(members, [])} + + def _mint(self, step: dict[str, Any]) -> dict[str, Any]: + rendering = rendering_for(step.get("layout")) + exchange = self.posted_build(step["spec"], rendering, None) + if exchange["response"]["status"] == 200: + raise _UnfitError( + "a mint step's build answers 200; a mint expects an operation" + ) + resource = self.acted_on(exchange, _OPERATION) + headers = exchange["response"].get("headers", {}) + self.minted = _Minted( + resource, headers, exchange["request"], step["spec"], rendering + ) + return _operation_outcome(resource) + + def _operation(self, step: dict[str, Any]) -> dict[str, Any]: + exchange = self.call("GET", POLL_PATH.format(operation_id=step["operation_id"])) + resource = self.acted_on(exchange, _OPERATION) + headers = exchange["response"].get("headers", {}) + rendering = rendering_for(step.get("layout")) + self.minted = _Minted(resource, headers, None, None, rendering) + return _operation_outcome(resource) + + def _newest_version(self, step: dict[str, Any]) -> dict[str, Any]: + return { + "newest_version": {"content_version": self.newest(step["spec"]["spec_id"])} + } + + def _result(self, step: dict[str, Any]) -> dict[str, Any]: + if self.minted is None: + raise _UnfitError("result follows no mint or operation") + minted = self.minted + manifest = self.long_build(minted.resource, minted.headers, minted.request) + member = self.member([], minted.spec, manifest, minted.rendering, False) + return {"dataset": dataset_summary([member], [])} + + +def _operation_outcome(resource: dict[str, Any]) -> dict[str, Any]: + operation = resource["operation"] + return {"operation": {k: operation[k] for k in ("operation_id", "status")}} + + +def with_step_notes( + outcome: dict[str, Any], + *, + long_builds: Sequence[dict[str, Any]], + retry_waits: Sequence[float], + warnings: Sequence[str], +) -> dict[str, Any]: + """`outcome` with the step's `long_builds`, `retry_waits` and `warnings`, + each given only when it holds any.""" + (value,) = outcome.values() + for name, notes in ( + ("long_builds", long_builds), + ("retry_waits", retry_waits), + ("warnings", warnings), + ): + if notes: + value[name] = list(notes) + return outcome + + +def expected_outcomes( + record: dict[str, Any], + *, + routes: _Routes, + base_url: str, + strict: dict[str, Any], + actions: Mapping[str, Mapping[str, Any]], + client_codes: Mapping[str, Mapping[str, Any]], + body_dir: Path, +) -> list[dict[str, Any]]: + """The outcome each of `record`'s steps reaches over its exchanges, its + binary bodies read from `body_dir`, over + `actions` for refusals' error classes and gap kinds, and over + `client_codes` for the class of each error the client raises itself. A + dataset outcome holds what `dataset_summary` gives, without rows and + columns. + + Raises: + ValueError: The exchanges do not fit the steps, or deriving an + outcome raised, so the record names its own problem and the + other records are checked. + """ + replay = _Replay( + record["exchanges"], + routes, + base_url, + _strict_members(strict), + actions, + client_codes, + body_dir, + ) + try: + outcomes = [replay.step(step) for step in record["call"]] + except (_UnfitError, KeyError, IndexError, StopIteration, ValueError) as exc: + raise ValueError(f"the exchanges do not fit the steps: {exc!r}") from exc + # Any other exception is a malformed record the rules missed. It is this + # record's problem, and the other records are checked as before. + except Exception as exc: + raise ValueError(f"deriving its outcomes raised {exc!r}") from exc + if replay.cursor != len(replay.exchanges): + raise ValueError( + f"the steps never make exchanges {replay.cursor} to " + f"{len(replay.exchanges) - 1}" + ) + return outcomes + + +# The origin of the second base URL the validator replays each scenario +# under, on a host no record names. +REPLAY_ORIGIN = "https://replay.example.org" + + +def origin_of(url: str) -> str: + parts = urlsplit(url) + return f"{parts.scheme}://{parts.netloc}" + + +def relocated( + exchanges: Sequence[Mapping[str, Any]], recorded: str, origin: str +) -> list[dict[str, Any]]: + """`exchanges` as a replay under a base URL on `origin` serves them: the + `recorded` origin, the one the record's `origin.base_url` names, becomes + `origin` wherever a response names it, in its JSON body and its + headers.""" + + def moved(value: Any) -> Any: + if isinstance(value, str): + return value.replace(recorded, origin) + if isinstance(value, list): + return [moved(item) for item in value] + if isinstance(value, dict): + return {key: moved(item) for key, item in value.items()} + return value + + return [ + {"request": exchange["request"], "response": moved(exchange["response"])} + for exchange in exchanges + ] + + +# A body file's name, `scenario.schema.json`'s `body_file` pattern: a bare +# file name, so it is never absolute and never leaves its directory. +BODY_FILE_NAME = re.compile( + _load(PACKAGE_DIR / "scenario.schema.json")["$defs"]["response"]["properties"][ + "body_file" + ]["pattern"] +) + + +def body_path(directory: Path, body_file: str) -> Path: + """The path of the body file `body_file` beside the records in + `directory`, checked before anything reads or writes it. + + Raises: + ValueError: `body_file` is not a bare file name, so it could be + absolute or resolve outside `directory`, or it names a symlink, + which would read or write the file it points to. + """ + if BODY_FILE_NAME.fullmatch(body_file) is None: + raise ValueError( + f"body file {body_file!r} is not a bare file name in {directory}" + ) + path = directory / body_file + if path.is_symlink(): + raise ValueError(f"body file {body_file!r} in {directory} is a symlink") + return path + + +def owns_body_file(name: str, body_file: str) -> bool: + """Whether `body_file` is one the scenario `name` writes: `.`, + or `-.` for its n-th body.""" + return ( + re.fullmatch(rf"{re.escape(name)}(-[0-9]+)?\.[a-z0-9]+", body_file) is not None + ) + + +def _under(url: str, base_url: str) -> bool: + """Whether `url` names a route under `base_url`: the same scheme, host + and port, and a path under the base URL's path.""" + parts, base = urlsplit(url), urlsplit(base_url) + root = base.path.rstrip("/") + return (parts.scheme, parts.hostname, parts.port) == ( + base.scheme, + base.hostname, + base.port, + ) and (parts.path == root or parts.path.startswith(root + "/")) + + +def absolute_url_problems(record: Mapping[str, Any], base_url: str) -> list[str]: + """Each absolute URL a record holds, a `url` request or a `location` + header, that is not a signed URL on the storage host, over https and + with the redacted query. A `location` may also name a route under + `base_url`. A local app's host, or any other, is refused by name.""" + storage = urlsplit(STORAGE_ORIGIN) + problems = [] + for index, exchange in enumerate(record["exchanges"]): + label = f"scenarios/{record['name']}.json: exchange {index}" + location = exchange["response"].get("headers", {}).get("location") + for url, api in ((exchange["request"].get("url"), False), (location, True)): + if not isinstance(url, str) or not urlsplit(url).netloc: + continue + parts = urlsplit(url) + if api and _under(url, base_url): + continue + if (parts.scheme, parts.netloc) != (storage.scheme, storage.netloc): + problems.append( + f"{label}: {url.split('?', 1)[0]} names {parts.netloc}, where " + f"a record's absolute URL names {STORAGE_ORIGIN}" + ) + elif parts.query != REDACTED_QUERY: + problems.append( + f"{label}: {url.split('?', 1)[0]} keeps a query other than " + f"{REDACTED_QUERY}" + ) + return problems + + +def _check_body_files( + file_name: str, + record: dict[str, Any], + parent: dict[str, Any] | None, + directory: Path, +) -> list[str]: + """A body file is the scenario's own, or for a synthetic scenario one + its parent names, and it exists.""" + inherited = ( + {e["response"].get("body_file") for e in parent["exchanges"]} + if parent + else set() + ) + problems = [] + for index, exchange in enumerate(record["exchanges"]): + body_file = exchange["response"].get("body_file") + if body_file is None: + continue + if not owns_body_file(record["name"], body_file) and body_file not in inherited: + problems.append( + f"scenarios/{file_name}: exchange {index}: body file {body_file!r} is " + "neither the scenario's own nor one its parent names" + ) + try: + path = body_path(directory, body_file) + except ValueError as exc: + problems.append(f"scenarios/{file_name}: exchange {index}: {exc}") + continue + if not path.is_file(): + problems.append( + f"scenarios/{file_name}: exchange {index}: body file " + f"{body_file!r} is missing" + ) + return problems + + +def _check_expect( + file_name: str, + record: dict[str, Any], + derived: list[dict[str, Any]], +) -> list[str]: + """Each outcome in `expect` against the one its exchanges give. A dataset + outcome's rows, columns and per-part row counts are the Parquet bodies' + and are not derived, except that several members put the `part` column + first and list each member's `part` value, rows summing to the dataset's.""" + problems = [] + for index, (stated, wanted) in enumerate( + zip(record["expect"], derived, strict=False) + ): + compared = stated + if "dataset" in stated and "dataset" in wanted: + dataset = stated["dataset"] + compared = { + "dataset": { + k: v + for k, v in dataset.items() + if k not in {"rows", "columns", "part_rows"} + } + } + problems.extend( + f"scenarios/{file_name}: step {index}: {problem}" + for problem in _part_problems(dataset, wanted["dataset"]["members"]) + ) + if compared != wanted: + problems.append( + f"scenarios/{file_name}: step {index} expects " + f"{json.dumps(compared)[:300]}, but its exchanges give " + f"{json.dumps(wanted)[:300]}" + ) + return problems + + +def _part_problems( + dataset: dict[str, Any], members: Sequence[Mapping[str, Any]] +) -> list[str]: + """A dataset of several members has the `part` column first and a + `part_rows` entry per member, in member order, whose `part` is that + member's `part_label` and whose rows sum to the dataset's. A dataset of + one member has neither.""" + several = len(members) > 1 + problems = [] + if (dataset["columns"][:1] == ["part"]) != several: + problems.append( + "the part column comes first exactly when the dataset has several members" + ) + part_rows = dataset.get("part_rows") + if (part_rows is not None) != several: + problems.append( + "part_rows is given exactly when the dataset has several members" + ) + return problems + if part_rows is None: + return problems + labels = [part_label(member) for member in members] + if [entry["part"] for entry in part_rows] != labels: + problems.append( + f"part_rows names {[entry['part'] for entry in part_rows]}, but the " + f"members' part values are {labels}" + ) + if sum(entry["rows"] for entry in part_rows) != dataset["rows"]: + problems.append("part_rows' rows do not sum to the dataset's rows") + return problems + + +def _check_scenarios( + validator: jsonschema.Draft202012Validator, + openapi: dict[str, Any], + *, + registry: dict[str, Any], + strict: dict[str, Any], + actions: Mapping[str, Mapping[str, Any]], + client_codes: Mapping[str, Mapping[str, Any]], + proxy_codes: Mapping[str, Mapping[str, Any]], + served_commit: str | None, +) -> list[str]: + directory = PACKAGE_DIR / "scenarios" + paths = sorted(directory.glob("*.json")) + problems = [] if paths else ["scenarios: no scenario records found"] + routes = _Routes(openapi) + records: dict[str, dict[str, Any]] = {} + + for path in paths: + try: + record = _load(path) + except ValueError as exc: + problems.append(f"scenarios/{path.name}: not valid JSON: {exc}") + continue + errors = _schema_problems(f"scenarios/{path.name}", validator, record) + problems.extend(errors) + if errors: + continue + name = record["name"] + if name != path.stem: + problems.append(f"scenarios/{path.name}: name {name!r} differs") + if name in records: + problems.append(f"scenarios/{path.name}: name {name!r} repeats") + records[name] = record + problems.extend(_check_steps(path.name, record)) + problems.extend(_check_client_errors(path.name, record, client_codes)) + + named_files: set[str] = set() + for name, record in records.items(): + file_name = f"{name}.json" + origin = record["origin"] + parent = None + if origin["kind"] == "synthetic": + parent = records.get(origin["derived_from"]) + if parent is None or parent["origin"]["kind"] != "recorded": + problems.append( + f"scenarios/{file_name}: derived_from {origin['derived_from']!r} " + "is not a recorded scenario" + ) + continue + named_files.update( + e["response"]["body_file"] + for e in record["exchanges"] + if "body_file" in e["response"] + ) + problems.extend(_check_body_files(file_name, record, parent, directory)) + recorded = parent or record + base_url = recorded["origin"]["base_url"] + base_path = urlsplit(base_url).path.rstrip("/") + if origin["kind"] == "recorded" and origin["dfo_commit"] != served_commit: + problems.append( + f"scenarios/{file_name}: dfo_commit {origin['dfo_commit']} is not " + f"served/SOURCE.json's commit {served_commit}" + ) + problems.extend(absolute_url_problems(record, base_url)) + for index, exchange in enumerate(record["exchanges"]): + label = f"scenarios/{file_name}: exchange {index}" + if origin["kind"] == "recorded": + problems.extend( + _check_exchange( + label, exchange, base_path, routes, registry, proxy_codes + ) + ) + headers = exchange["response"].get("headers", {}) + if "url" not in exchange["request"] and untraced(headers): + problems.append( + f"{label}: the API response carries no {TRACE_HEADER} " + "header and is not marked Cache-Control: public" + ) + else: + problems.extend( + _check_problem_code( + label, exchange["response"], registry, proxy_codes + ) + ) + for resource in _failed_operations(record): + error = resource.get("error") + status = error.get("status") if isinstance(error, dict) else None + problems.extend( + _check_problem_code( + f"scenarios/{file_name}: failed operation", + { + "status": status if isinstance(status, int) else 500, + "json": error, + }, + registry, + proxy_codes, + ) + ) + replay = partial( + expected_outcomes, + routes=routes, + strict=strict, + actions=actions, + client_codes=client_codes, + body_dir=directory, + ) + try: + derived = replay(record, base_url=base_url) + except ValueError as exc: + problems.append(f"scenarios/{file_name}: {exc}") + continue + problems.extend(_check_expect(file_name, record, derived)) + elsewhere = REPLAY_ORIGIN + urlsplit(base_url).path + exchanges = relocated(record["exchanges"], origin_of(base_url), REPLAY_ORIGIN) + try: + moved = replay({**record, "exchanges": exchanges}, base_url=elsewhere) + except ValueError as exc: + moved = [{"unfit": str(exc)}] + if moved != derived: + problems.append( + f"scenarios/{file_name}: replayed under {elsewhere}, with the " + f"recorded origin replaced by its own, it gives " + f"{json.dumps(moved)[:300]}, not the outcomes it gives under " + f"{base_url}" + ) + + problems.extend( + f"scenarios/{p.name}: no scenario names this body file" + for p in sorted(directory.iterdir()) + if p.is_file() and p.suffix != ".json" and p.name not in named_files + ) + return problems + + +# The classes a refusal's HTTP status maps to. +_STATUS_ONLY_CLASSES = {*STATUS_CLASSES.values(), "ServerError", "InvalidRequestError"} + + +def _check_client_errors( + file_name: str, + record: dict[str, Any], + client_codes: Mapping[str, Mapping[str, Any]], +) -> list[str]: + """Each error outcome no refusal in the record carries the code of names + a client code of its class. A refusal is a response of status 400 or + more, or a failed operation's error. A SearchWarning or DataWarning + carries the server's code.""" + refused = { + refusal_code(e["response"].get("json")) + for e in record["exchanges"] + if e["response"]["status"] >= 400 + } | { + refusal_code(body["error"]) + if isinstance(body.get("error"), dict) + # A failed operation with no document raises operation_failed. + else OPERATION_FAILED + for body in _failed_operations(record) + } + problems = [] + for index, outcome in enumerate(record["expect"]): + error = outcome.get("error") + if error is None or error["class"] in WARNING_CLASSES: + continue + code = error["code"] + if code in refused: + continue + label = f"scenarios/{file_name}: step {index}" + row = client_codes.get(code) if code is not None else None + if row is None: + problems.append( + f"{label}: {error['class']} code {code!r} is neither a refusal's " + "code in the exchanges nor a client code" + ) + elif row["class"] == BY_STATUS: + if error["class"] not in _STATUS_ONLY_CLASSES: + problems.append( + f"{label}: {code!r} raises the class a status maps to, which " + f"{error['class']} is not" + ) + elif row["class"] != error["class"]: + problems.append( + f"{label}: client code {code!r} raises {row['class']}, not " + f"{error['class']}" + ) + return problems + + +def _failed_operations(record: dict[str, Any]) -> Iterator[dict[str, Any]]: + """Each operation resource in the record's responses whose status is + failed.""" + for exchange in record["exchanges"]: + body = exchange["response"].get("json") + operation = body.get("operation") if isinstance(body, dict) else None + if isinstance(operation, dict) and operation.get("status") == "failed": + yield body + + +def _check_steps(file_name: str, record: dict[str, Any]) -> list[str]: + call, expect = record["call"], record["expect"] + problems = [] + if len(call) != len(expect): + problems.append( + f"scenarios/{file_name}: {len(call)} steps but {len(expect)} outcomes" + ) + previous: str | None = None + for index, step in enumerate(call): + op = step["op"] + if op == "fetch" and "spec" not in step and "ref" not in step: + op = "fetch_answer" + needs = _ACTS_ON_PREVIOUS.get(op) + if needs is not None and previous not in needs: + problems.append( + f"scenarios/{file_name}: step {index} ({op}) does not follow " + f"a step in {sorted(needs)}" + ) + previous = op + return problems + + +# --- refs ------------------------------------------------------------------- + + +def _ref_rule(ref: dict[str, Any]) -> str | None: + """The first ref rule `ref` breaks, or None.""" + seen: set[str] = set() + for member in ref["members"]: + spec = member["spec"] + if spec["definition"]["spec_id"] != spec["spec_id"]: + return "definition_spec_id_mismatch" + if spec["spec_id"] in seen: + return "repeated_spec_id" + seen.add(spec["spec_id"]) + return None + + +def _check_refs(validator: jsonschema.Draft202012Validator) -> list[str]: + paths = sorted((PACKAGE_DIR / "refs").glob("*.json")) + problems = [] if paths else ["refs: no ref examples found"] + verdicts: set[str] = set() + for path in paths: + label = f"refs/{path.name}" + record = _load(path) + if not isinstance(record, dict) or record.get("name") != path.stem: + problems.append(f"{label}: name does not match the file name") + continue + error = record.get("error") + if ("expect" in record) == isinstance(error, dict): + problems.append(f"{label}: carries neither or both of expect and error") + continue + valid = validator.is_valid(record.get("ref")) + by = error.get("by") if isinstance(error, dict) else None + verdicts.add(by or "accept") + if by == "schema": + if valid: + problems.append(f"{label}: the schema accepts a ref it should reject") + continue + if not valid: + first = next(validator.iter_errors(record.get("ref"))) + problems.append(f"{label}: ref fails the schema at {_where(first)}") + continue + broken = _ref_rule(record["ref"]) + wanted = error.get("reason") if by == "rule" else None + if broken != wanted: + problems.append(f"{label}: breaks rule {broken!r}, expected {wanted!r}") + problems.extend( + f"refs: no {verdict} example" + for verdict in ("accept", "schema", "rule") + if paths and verdict not in verdicts + ) + return problems + + +# --- rules ------------------------------------------------------------------ + + +def _check_rules(validator: jsonschema.Draft202012Validator) -> list[str]: + paths = sorted( + p + for p in (PACKAGE_DIR / "rules").glob("*.json") + if p.name != "rules.schema.json" + ) + problems = [] if paths else ["rules: no rule files found"] + for path in paths: + label = f"rules/{path.name}" + document = _load(path) + errors = _schema_problems(label, validator, document) + problems.extend(errors) + if errors: + continue + if document["rule"] != path.stem: + problems.append(f"{label}: rule {document['rule']!r} differs") + names = [vector["name"] for vector in document["vectors"]] + problems.extend( + f"{label}: vector {name!r} repeats" + for name in sorted({n for n in names if names.count(n) > 1}) + ) + return problems + + +def validate() -> list[str]: + validators = _contract_validators() + openapi = _load(PACKAGE_DIR / "served" / "openapi.json") + registry = _load(REGISTRY_PATH) + source = _load(PACKAGE_DIR / "served" / "SOURCE.json") + problems = _check_source(source) + problems.extend(surface_problems(openapi)) + + strict = _load(PACKAGE_DIR / "strict-fields.json") + errors = _schema_problems( + "strict-fields.json", validators["strict-fields.schema.json"], strict + ) + problems.extend(errors or _check_strict_fields(strict, openapi)) + + actions = _load(PACKAGE_DIR / "actions.json") + errors = _schema_problems( + "actions.json", validators["actions.schema.json"], actions + ) + problems.extend(errors or _check_actions(actions, registry)) + + client_codes = _load(PACKAGE_DIR / "client-codes.json") + errors = _schema_problems( + "client-codes.json", validators["client-codes.schema.json"], client_codes + ) + scenario_schema = validators["scenario.schema.json"].schema + rules_schema = validators["rules/rules.schema.json"].schema + problems.extend( + errors + or _check_client_codes( + client_codes, + actions, + registry, + error_classes(scenario_schema), + key_lookup_reasons(rules_schema), + ) + ) + client_rows = [] if errors else client_codes["codes"] + + taken = { + "registries/codes.json": {entry["code"] for entry in registry["entries"]}, + "actions.json": {row["code"] for row in actions["codes"]}, + "client-codes.json": {row["code"] for row in client_rows}, + } + proxy_codes = _load(PACKAGE_DIR / "proxy-codes.json") + errors = _schema_problems( + "proxy-codes.json", validators["proxy-codes.schema.json"], proxy_codes + ) + problems.extend( + errors + or _check_other_codes( + "proxy-codes.json", [row["code"] for row in proxy_codes["codes"]], taken + ) + ) + proxy_rows = [] if errors else proxy_codes["codes"] + warning_codes = _load(PACKAGE_DIR / "warning-codes.json") + errors = _schema_problems( + "warning-codes.json", validators["warning-codes.schema.json"], warning_codes + ) + problems.extend( + errors + or _check_warning_codes( + warning_codes, + {**taken, "proxy-codes.json": {row["code"] for row in proxy_rows}}, + key_format_reasons(rules_schema), + ) + ) + + problems.extend( + _check_scenarios( + validators["scenario.schema.json"], + openapi, + registry=registry, + strict=strict, + actions={row["code"]: row for row in actions["codes"]}, + client_codes={row["code"]: row for row in client_rows}, + proxy_codes={row["code"]: row for row in proxy_rows}, + served_commit=source.get("commit") if isinstance(source, dict) else None, + ) + ) + problems.extend(_check_refs(validators["dataset-ref.schema.json"])) + problems.extend(_check_rules(validators["rules/rules.schema.json"])) + return problems + + +def main() -> int: + problems = validate() + for problem in problems: + print(problem, file=sys.stderr) + if problems: + print(f"{len(problems)} problem(s) in {PACKAGE_DIR}", file=sys.stderr) + return 1 + strict = _load(PACKAGE_DIR / "strict-fields.json") + print( + f"client contract valid: {len(_load(PACKAGE_DIR / 'actions.json')['codes'])} " + "action rows, " + f"{len(_load(PACKAGE_DIR / 'client-codes.json')['codes'])} client codes, " + f"{len(strict['required'])} required and " + f"{len(strict['enums'])} enum pointers, " + f"{len(list((PACKAGE_DIR / 'scenarios').glob('*.json')))} scenarios" + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main())